如果一幅图像,其像素的灰度值只有两个取值,那么这样的图像我们就称作二值图像。
把图像转化为二值图像的过程称为图像的二值化处理。
如果对图像的灰度值按与某个值的大小关系进行新值的设置,称为叫图像的阈值化处理。
在OpenCV中,可以使用函数threshold()对图像作二值化或阈值化处理。
其原型如下:
C++原型如下:
double cv::threshold(InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type)
Python原型如下:
retval, dst = cv.threshold(src, thresh, maxval, type[, dst])
参数意义如下:
src—输入图像,即待二值化的图像,可以是多通道,8位或32位符点型数据类型的图像,但是当参数type选择THRESH_OTSU或THRESH_TRIANGLE时,图像只能为8位的单通道图像。
dst—经过二值化处理的输出图像。
thresh—进行二值化处理的阈值。当type选择THRESH_OTSU或THRESH_TRIANGLE时,这个值被忽略,此时函数用通过OTSU法或TRIANGLE法计算出的阈值进行二值化操作。
maxval—二值化处理后的maxval值,详情见对参数type的介绍。当type选择THRESH_BINARY、THRESH_BINARY_INV、THRESH_OTSU、THRESH_TRIANGLE时会用到它,在type选择其它类型时,虽然它没有用,但也要填上它。
type—这个参数的可选枚举值及意义如下:
要特别注意的是,在Python环境中,函数threshold()的返回值有两个,分别为retval和dst。
第一个retval代表函数threshold()在进行二值化处理时使用的阈值,这一点挺好,特别是对于type选择THRESH_OTSU或THRESH_TRIANGLE时,我们可以知道进行二值处理时用的阈值究竟是多少。
如果不想使用retval这个返回值,可以像下面这样调用:
_, dst = cv.threshold(src, thresh, maxval, type[, dst])
即用下划线命名返回值retval。
明白了以上各参数的意义和可取值后,就基本了解了函数threshold()的使用,接下来再看看示例代码就能完全掌握了。
示例代码请大家访问本博文的原文查看,
本博文的原文链接如下:
https://www.hhai.cc/thread-162-1-1.html
在本博文的原文中,向大家提供了以下四个示例代码及它们的运行结果:
①当type取值为THRESH_BINARY 、THRESH_BINARY_INV 、THRESH_TRUNC、THRESH_TOZERO 、THRESH_TOZERO_INV 时的Python代码;
②当type取值为THRESH_BINARY 、THRESH_BINARY_INV 、THRESH_TRUNC、THRESH_TOZERO 、THRESH_TOZERO_INV 时的C++代码;
③当type取值为THRESH_OTSU 、THRESH_TRIANGLE时的Python示例代码;
④当type取值为THRESH_OTSU 、THRESH_TRIANGLE时的C++示例代码。