OpenCV版本差异所引发的cv2.findContours()函数传参问题:ValueError: not enough values to unpack (expected 3, got 2)

在使用opencv-python4.1.2.30时,调用cv2.findContours()出现ValueError,预期解包3个值但只得到2个。解决方法包括降级OpenCV到3.4.3.18,但遇到Anaconda渠道找不到对应版本的问题,最终通过手动下载whl文件并安装。OpenCV2与4中findContours返回2个值,而OpenCV3返回3个值,包括图像、轮廓点集和轮廓索引。

一、问题如下:

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

//cv2.findContours找出轮廓值,cv2.RETR_EXTERNAL表示图像的外轮廓
imagex, contours, hierarchy = 
cv2.findContours(binary_niblack.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

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

  • 错误信息:
ValueError: not enough values to unpack (expected 3, got 2)

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

二、问题解决:

1、降级(或升级)OpenCV:

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

pip3 install opencv-python==3.4.3.18

使用pip将版本降为3.4.3.18。

因为我用的是Anaconda,所以这样子降版本没有用,需要用

conda install opencv-python==3.4.3.18

但显示错误:
PackagesNotFoundError: The following packages are not available from current channels:

只好百度whl文件安装opencv-python 3.4.0.12

再在Anaconda上安装

出现问题:下载whl文件问题:解决python pip安装提示"not a supported wheel on this platform"

2、解析差异:
  • OpenCV2和OpenCV4中:
    findContours这个轮廓提取函数会返回两个值:
    ①轮廓的点集(contours)
    ②各层轮廓的索引(hierarchy)
  • OpenCV3中:
    则会返回三个值:
    ①处理的图像(image)     
    ②轮廓的点集(contours)
    ③各层轮廓的索引(hierarchy)

cv2.findContours()相关:

参数:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值