首页 > 代码库 > OpenCV官方文档学习记录(11)

OpenCV官方文档学习记录(11)

阈值化:

主要函数: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 image26     cvtColor(img, gray, CV_RGB2GRAY);27     Show("Source", gray);28     /* 0: Binary29     1: Binary Inverted30     2: Threshold Truncated31     3: Threshold to Zero32     4: Threshold to Zero Inverted33     */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;

含义如字面,具体使用自行摸索。因为据说阈值在图像分割作用比较大,建议重点记忆和体会。

 

补充一下以上阈值变换的图示,下图中第一行是原波形,蓝色线是阈值线,其余行的图分别对应将第一行的图进行以上的五种阈值变换中一种的结果 ,按照的是上述顺序:

 

以上。

OpenCV官方文档学习记录(11)