zl程序教程

您现在的位置是:首页 >  后端

当前栏目

OpenCV基础——threshold函数的使用

Opencv基础 函数 threshold 使用
2023-09-27 14:27:27 时间

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。OpenCV中提供了函数cv::threshold();

 

注意:作者采用OpenCV 3.0.0

 

函数原型

参数说明

src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)

dst:输出图像

thresh:阈值

maxval:dst图像中最大值

type:阈值类型,可以具体类型如下:

编号阈值类型枚举

注意

1THRESH_BINARY

 

2THRESH_BINARY_INV

 

3THRESH_TRUNC

 

4THRESH_TOZERO

 

5THRESH_TOZERO_INV

 

6THRESH_MASK

不支持

7THRESH_OTSU

不支持32位

8THRESH_TRIANGLE

不支持32位

具体如下表

生成关系如下表

函数参考可以至http://docs.opencv.org/3.0.0/examples.html

 

测试代码

Mat gray;

    cvtColor(src, gray, CV_BGR2GRAY); 

    // 全局二值化

    int th = 100;

    cv::Mat threshold1,threshold2,threshold3,threshold4,threshold5,threshold6,threshold7,threshold8;

    cv::threshold(gray, threshold1, th, 255, THRESH_BINARY);

    cv::threshold(gray, threshold2, th, 255, THRESH_BINARY_INV);

    cv::threshold(gray, threshold3, th, 255, THRESH_TRUNC);

    cv::threshold(gray, threshold4, th, 255, THRESH_TOZERO);

    cv::threshold(gray, threshold5, th, 255, THRESH_TOZERO_INV);

    //cv::threshold(gray, threshold6, th, 255, THRESH_MASK);

    cv::threshold(gray, threshold7, th, 255, THRESH_OTSU);

    cv::threshold(gray, threshold8, th, 255, THRESH_TRIANGLE);

    cv::imshow("THRESH_BINARY", threshold1);

    cv::imshow("THRESH_BINARY_INV", threshold2);

    cv::imshow("THRESH_TRUNC", threshold3);

    cv::imshow("THRESH_TOZERO", threshold4);

    cv::imshow("THRESH_TOZERO_INV", threshold5);

    //cv::imshow("THRESH_MASK", threshold6);

    cv::imshow("THRESH_OTSU", threshold7);

    cv::imshow("THRESH_TRIANGLE", threshold8);

    cv::waitKey(0);

 

测试结果

原图

THRESH_BINARY

THRESH_BINARY_INV

THRESH_TRUNC

THRESH_TOZERO

THRESH_TOZERO_INV

THRESH_OTSU

THRESH_TRIANGLE

 

注意:

如果采用彩色图像进行计算会得到彩色效果,而不是预期的二值化结果

彩色源图

灰度源图