Python-OpenCV4中的阈值二值化函数threshold(),要特别注意其返回值有两个

关于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,另一个才是二值化后的图像。

猜你喜欢

转载自blog.csdn.net/wenhao_ir/article/details/125188532