首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。