阈值分割方法总结
閾值是界限的意思,閾值分割就是以一個合適的像素值作為界限將圖像處理成高對比度、容易識別的圖像的一種方法。
threshold()
舉個例子理解下thresholdType,拿第一種方法為例。像素值如果大于閾值,則把像素值變成255,否則,變成0.這樣以來,就把原圖變成黑白兩色,對比度明顯。
自適應閾值分割
void cv::adaptiveThreshold( cv::InputArray src, // 輸入圖像 cv::OutputArray dst, // 輸出圖像 double maxValue, // 向上最大值 int adaptiveMethod, // 自適應方法,平均或高斯 int thresholdType // 閾值化類型 int blockSize, // 塊大小 double C // 常量 );adaptiveThreshold()支持兩種自適應方法,cv::ADAPTIVE_THRESH_MEAN_C(平均)和cv::ADAPTIVE_THRESH_GAUSSIAN_C(高斯)。
adaptiveThreshold(image, src, 255, ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,5,20);自適應閾值不用自己選擇,該函數根據圖像情況自己設定。
該圖是經canny檢測之后的閾值分割圖。
閾值分割還有一種方法,直接說明:
Mat image = imread("D:\\program\\bu1.png",0);//讀入模板圖imshow("原圖",image);waitKey(0);Mat dstImg(image.size(), CV_8UC3, Scalar::all(0));//純黑圖像int u1 = image.rows;//閾值化處理int u2 = image.cols;for (int i = 0; i < image.rows; i++){for (int j = 0; j < image.cols; j++){sum = sum + image.at<uchar>(i, j);}}int u = u1*u2;int average = (int)sum/u*2;threshold(image, t_image, average, 255,CV_THRESH_BINARY); Canny(src,t_image,50,50); imshow("閾值分割圖",t_image);waitKey(0);該方法簡單明了,閾值取值適中,不錯。
總結
- 上一篇: D-S证据理论超简单理解
- 下一篇: IAT-Hook 劫持进程Api调用