关于OpenCV4中的函数threshold(),之前已经写过博文介绍了,详情见下面的链接:
利用OpenCV的函数threshold()实现双阈值二值化操作的C++代码
半阈值化的原理、作用及利用函数OpenCV的函数threshold()实现半阈值化的方法
利用OpenCV的函数threshold()对图像作基于OTSU的阈值化处理
这篇博文主要是提醒大家函数threshold()的Python版本的返回值有两个。
首先我们再来回顾下它的C++原型,其C++原型是没有返回值的:
double cv::threshold(InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type )
可见,C++原型的确是没有返回值的。
但C++原型没有返回值不代表Python版没有,Python版的原型如下:
retval, dst = cv.threshold( src, thresh, maxval, type[, dst])
从中,我们可以看出有两个返回值,分别为retval和dst。
dst的含义自不必说。
retval的含义为是否使用了Otsu算法或Triangle算法计算阈值。
第二个参数retval我们一般是不用的,如果我们不想用第二个参数retval,那怎么办呢?
像下面这样书写代码就行了:
_, B1_step06_1 = cv.threshold(B1_step06_1, 150, 255, cv.THRESH_BINARY)
如果你把上面的代码写成下面这样:
B1_step06_1 = cv.threshold(B1_step06_1, 150, 255, cv.THRESH_BINARY)
则这句代码运行时不会报错,但是后续对二值化图像B1_step06_1的调用会出问题,此时B1_step06_1不再是一幅二值化的图像,而是包含了两个元素的容器,一个元素是返回值retval,另一个才是二值化后的图像。