您的位置:首页 > 运维架构

OpenCV基础——threshold函数的使用

2017-08-10 12:30 204 查看
图像的二值化就是将图像上的像素点的灰度值设置为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



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

彩色源图
灰度源图




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息