关于OpenCV4中的函数threshold(),之前已经写过博文介绍了,详情见下面的链接:
https://www.hhai.cc/thread-162-1-1.html
这篇博文主要是提醒大家函数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的含义为函数threshold()在进行二值化处理时使用的阈值的数值。
第二个参数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不再是一幅二值化的图像,而是包含了两个元素的元组,元组的第0个元素是返回值retval,第2个元素才是二值化后的图像,如下图所示: