日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV中阈值操作

發(fā)布時(shí)間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV中阈值操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? ? 閾值分割,顧名思義,就是對(duì)圖像的像素點(diǎn)和選中的閾值進(jìn)行比對(duì)的圖像分割方法,在OpenCV 2.X中,Threshold()函數(shù)(基本閾值操作)和adaptiveThreshold()函數(shù)(自適應(yīng)閾值操作)可以完成圖像閾值分割的目的。基本思想是:給定一個(gè)數(shù)組和一個(gè)閾值,根據(jù)數(shù)組中的每個(gè)元素值是高于還是低于閾值而進(jìn)行一些處理。


1.固定閾值操作:Threshold()函數(shù)

? ? ? ?Threshold()函數(shù)對(duì)單通道數(shù)組應(yīng)用固定閾值操作,該函數(shù)的典型應(yīng)用是對(duì)灰度圖像進(jìn)行閾值操作得到二值圖像,(compare()函數(shù)也可以達(dá)到此目的)或者是去掉噪聲,例如過(guò)濾很小或者很大像素值的圖像點(diǎn)
? C++:double threshold(InputArray src,OutputArray dst,double thresh,double maxval,int type) ? ? ? ? ? ? 參數(shù)一:輸入數(shù)組,單通道,8或者32位浮點(diǎn)類型的Mat即可 ? ? ? ? ? ? 參數(shù)二:和第一個(gè)參數(shù)中的Mat變量有一樣的尺寸和類型。 ? ? ? ? ? ? 參數(shù)三:閾值的具體值 ? ? ? ? ? ? 參數(shù)四:double 類型的maxval,當(dāng)?shù)谖鍌€(gè)參數(shù)閾值類型type取CV_THRESHOLD_BINARY或者 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??CV_THRESHOLD_BINARY_INV時(shí)閾值類型時(shí)的最大值 。 ? ? ? ? ? ? 參數(shù)五:閾值類型,threshold()函數(shù)支持的對(duì)圖像取閾值的方法由下面確定: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? 上述標(biāo)識(shí)符一次取值為0,1,2,3,4. 示例如下:// threshold.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 //#include "stdafx.h" #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream>using namespace std; using namespace cv;#define WINDOW_NAME "[程序窗口]" //為窗口標(biāo)題定義的宏int g_nThresholdValue = 100; int g_nThresholdType = 3; Mat srcImage,grayImage,dstImage;//全局函數(shù)聲明 void on_Threshold(int,void*);//回調(diào)函數(shù)int _tmain(int argc, _TCHAR* argv[]) {srcImage = imread("1.jpg");if(!srcImage.data){printf("圖片讀取失敗!\n");return false;}imshow("[源圖像]",srcImage);//保留一份原圖的灰度圖cvtColor(srcImage,grayImage,COLOR_RGB2GRAY);//創(chuàng)建窗口并顯示原始圖namedWindow(WINDOW_NAME,WINDOW_AUTOSIZE);//創(chuàng)建滑動(dòng)條來(lái)控制閾值createTrackbar("模式",WINDOW_NAME,&g_nThresholdType,4,on_Threshold);createTrackbar("參數(shù)值",WINDOW_NAME,&g_nThresholdValue,255,on_Threshold);//初始化自定義的閾值回調(diào)函數(shù)on_Threshold(0,0);waitKey();return 0; }void on_Threshold(int,void*) {//調(diào)用閾值函數(shù)threshold(grayImage,dstImage,g_nThresholdValue,255,g_nThresholdType);//更新效果圖imshow(WINDOW_NAME,dstImage); } 效果圖:

?2.自適應(yīng)閾值操作:adaptiveThreshold()函數(shù) ? ? ? ? ? ? adaptiveThreshold()函數(shù)的作用是對(duì)矩陣采用自適應(yīng)閾值操作,支持就地操作
C++:void adaptiveThreshold(InputArray src,OutputArray dst,double maxValue,int adaptiveMethod,int thresholdType,int blockSize,double C) ? ? ? ? ?? ? ? ? ? ?參數(shù)一:源圖像,Mat類對(duì)象即可,需要是8位單通道浮點(diǎn)型圖像 ? ? ? ? ?參數(shù)二:需要和源圖像有一樣的尺寸和類型 ? ? ? ? ?參數(shù)三:給像素賦的滿足條件的非零值 ? ? ? ? ?參數(shù)四:用于指定要使用的自適應(yīng)閾值算法,取值為:ADAPTIVE_THRESH_MEAN_C或者 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ADAPTIVE_THRESH_GAUSSIAN_C ? ? ? ? ?參數(shù)五:閾值類型,取值為THRESH_BINARY,THRESH_BINARY_INV其中之一 ? ? ? ? ?參數(shù)六:用于計(jì)算閾值大小的一個(gè)像素的鄰域尺寸,取值為3,5,7.等 ? ? ? ? ?參數(shù)七:減去平均或者加權(quán)平均后的常數(shù)值,通常為正數(shù),但少數(shù)情況下也可以為0或者負(fù)數(shù)。
adaptiveThreshold()函數(shù)根據(jù)如下公式,將一副圖像變換為一副二值圖像。 ? 當(dāng)參數(shù)五的"閾值類型"thresholdType"取值為THRESH_BINARY時(shí),公式如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?當(dāng)參數(shù)五的"閾值類型"thresholdType"取值為THRESH_BINARY_INV時(shí),公式如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
而其中的T(x,y) 為分別計(jì)算每個(gè)單獨(dú)像素值的閾值,取值如下:
  • 對(duì)于 ADAPTIVE_THRESH_MEAN_C 的方法,閾值T(x,y) 為blockSize * blockSize 鄰域內(nèi)(x,y) 減去第七個(gè)參數(shù) C 的平均值
  • 對(duì)于 ADAPTIVE_THRESH_GAUSSIAN_C 的方法,閾值T(x,y) 為blockSize * blockSize 鄰域內(nèi)(x,y) 減去第七個(gè)參數(shù) C 與高斯窗交叉相關(guān)的加權(quán)總和。

#include "stdafx.h" #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream>using namespace std; using namespace cv; int main(int argc, char** argv) {Mat image = imread("1.jpg");Mat grayImage;cvtColor(image,grayImage,COLOR_RGB2GRAY);if (image.empty()){cout << "read image failure" << endl;return -1;}// 局部二值化int blockSize = 7;int constValue = 11;Mat local;adaptiveThreshold(grayImage, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);imshow("[源圖像]", image);imshow("localThreshold", local);waitKey(0);return 0; }

總結(jié)

以上是生活随笔為你收集整理的OpenCV中阈值操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。