在cv2.findContours函数使用中,报ValueError: not enough values to unpack (expected 3, got 2)

cv2.findContours()函数

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  

其中
第一个参数是需要寻找轮廓的图像;
第二个参数是轮廓的检索模式,有四种方式:

  • cv2.RETR_EXTERNAL表示只检测外轮廓
  • cv2.RETR_LIST检测的轮廓不建立等级关系
  • cv2.RETR_LIST检测的轮廓不建立等级关系
  • cv2.RETR_TREE建立一个等级树结构的轮廓;

这四种方法一个一个尝试,看一下哪种方法比较合适项目要求
第三个参数method为轮廓的近似办法,有三种方法:

  • cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1;
  • cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息;
  • cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法。

在使用cv2.findContours()函数来查找检测物体的轮廓,根据网络上的教程复制以下代码:

image,cnts,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

运行报了以下错误:

image,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)

看了python cv2.findContours()函数,发现这是因为opencv版本的问题
我查看配置环境的opencv版本,版本为4.5.5

import cv2
print(cv2.__version__)

对于opencv3会返回三个值,分别是img, countours, hierarchy,而对于注:opencv4会返回两个值,分别是countours, hierarchy
因此,对于上面错的错误,我解决方法如下:

contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值