python适用的opencv版本_Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题...

一、问题如下:

cv2.findContours()这个方法是用来找出轮廓值的:

#cv2.findContours找出轮廓值,cv2.RETR_EXTERNAL表示图像的外轮廓

binary, contours, h = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

但是在运行时,我所使用的opencv-python4.1.0.25则报错:

1198161-20190510082836481-101630775.png

错误信息:

ValueError: not enough values to unpack (expected 3, got 2)

值错误:没有足够的值解包(应为3,得到2)

二、问题解决:

1、降级(或升级)OpenCV:

我在python中安装的第三方库是OpenCV4.1.0.25,所以这里要降级处理:

pip3 install opencv-python==3.4.3.18

使用pip将版本降为3.4.3.18。

1198161-20190510084617598-68326858.png

1198161-20190510084636330-1993338068.png

降级之后,PyCharm中可以看到现在的版本号:

1198161-20190510084749186-2122345202.png

(如果是OpenCV2则要升级到OpenCV3)

2、解析差异:

OpenCV2和OpenCV4中:

findContours这个轮廓提取函数会返回两个值:

①轮廓的点集(contours)

②各层轮廓的索引(hierarchy)

OpenCV3中:

则会返回三个值:

①处理的图像(image)

②轮廓的点集(contours)

③各层轮廓的索引(hierarchy)

三、cv2.findContours()相关:

1、参数:

①第一个参数:

寻找轮廓的图像

②第二个参数表示轮廓的检索模式,有四种:

cv2.RETR_EXTERNAL

只检测外轮廓

cv2.RETR_LIST

检测的轮廓不建立等级关系

cv2.RETR_CCOMP

建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息

cv2.RETR_TREE

建立一个等级树结构的轮廓

③第三个参数method为轮廓的近似办法:

cv2.CHAIN_APPROX_SIMPLE

压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标(矩形只需四顶点)

cv2.CHAIN_APPROX_TC89_L1

使用teh-Chinl chain 近似算法

CV_CHAIN_APPROX_TC89_KCOS

cv2.CHAIN_APPROX_NONE

存储所有的轮廓点,相邻的两个点的像素位置差不超过1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值