标签:style blog http io ar color os 使用 sp
阈值化:
主要函数:threshold
代码:
1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 int MAX_KERNEL_LENGTH = 31; 8 9 using namespace std; 10 using namespace cv; 11 12 void Show(const std::string &name, const Mat &img) 13 { 14 namedWindow(name, CV_WINDOW_AUTOSIZE); 15 imshow(name, img); 16 } 17 18 int main(void) 19 { 20 Mat img = imread("lena.jpg"); 21 if (img.empty()) 22 return -1; 23 24 Mat gray; 25 //convert img to gray image 26 cvtColor(img, gray, CV_RGB2GRAY); 27 Show("Source", gray); 28 /* 0: Binary 29 1: Binary Inverted 30 2: Threshold Truncated 31 3: Threshold to Zero 32 4: Threshold to Zero Inverted 33 */ 34 Mat dst; 35 int values = 100; 36 threshold(gray, dst, values, 255, CV_THRESH_BINARY); 37 Show("Dst", dst); 38 waitKey(); 39 return 0; 40 }
注释部分说明了函数的第三个参数所代表的阈值变换含义:
0:二值化
1:反向二值化
2:截断化
3.超置零
4.低置零
上述0参数结果为:
解释:
Binary会将超过阈值values的像素点全部置为最大值255(黑)这个maxVal参数,同时其他小于阈值的都被置零(白)。
参考公式:
下面是另外几个参数的结果:
1:Binary, Inverted
公式如下:
2.Truncate
公式:
3.Threshold to Zero
公式:
4.Threshold to Zero, Inverted
公式:
注意:以上代码全部与示例相同,不同之处就是更换了threshold的最后一个类型参数,提供如下:
1 CV_THRESH_BINARY; 2 CV_THRESH_BINARY_INV; 3 CV_THRESH_TRUNC; 4 CV_THRESH_TOZERO; 5 CV_THRESH_TOZERO_INV;
含义如字面,具体使用自行摸索。因为据说阈值在图像分割作用比较大,建议重点记忆和体会。
补充一下以上阈值变换的图示,下图中第一行是原波形,蓝色线是阈值线,其余行的图分别对应将第一行的图进行以上的五种阈值变换中一种的结果 ,按照的是上述顺序:
以上。
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/lhyz/p/4154467.html