关于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个元素才是二值化后的图像,如下图所示:

本文详细介绍了OpenCV4中Python版本的threshold()函数,该函数在二值化处理时返回两个值:retval和dst。retval是实际使用的阈值,dst是处理后的二值化图像。若不需使用retval,可以将其赋值为下划线_。错误地忽视retval可能导致后续图像处理出现问题,因为此时dst将是一个包含两个元素的元组,真正的二值化图像位于第二个元素。
5168

被折叠的 条评论
为什么被折叠?



