weixin_57922847
2021-06-08 20:38
采纳率: 100%
浏览 31

opencv+python提取轮廓例程,为什么报错呢

import cv2
import numpy as np
img=cv2.imread('test.jpg')
imgray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh=cv2.threshold(imgray,127,255,0)
image,contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('imageshow',image)  # 显示返回值image,其实与输入参数的thresh原图没啥区别
cv2.waitKey()
print(np.size(contours))  #   得到该图中总的轮廓数量
print(contours[0])   #  打印出第一个轮廓的所有点的坐标, 更改此处的0,为0--(总轮廓数-1),可打印出相应轮廓所有点的坐标
print(hierarchy) #打印出相应轮廓之间的关系
img=cv2.drawContours(img,[contours[0]],-1,(0,255,0),10)  #标记处编号为0的轮廓,此处img为三通道才能显示轮廓
cv2.imshow('drawimg',img)
cv2.waitKey()
cv2.destroyAllWindows()

Traceback (most recent call last):

  File "D:\lpcj\Qt-Camera\lunkuo.py", line 14, in <module>
    image,contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 爱晚乏客游 2021-06-08 22:59
    已采纳

    第六行只有两个返回值的,你写的三个返回值是旧版本的opencv,应该是2.x和3.4之前的写法吧,目前的4.x版本都是两个返回值,第一个代表轮廓,第二个代表轮廓关系

    contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

    而这句报错ValueError: not enough values to unpack (expected 3, got 2),的意思就是没有足够对应的值,你希望返回值是三个,但是实际上只有两个返回值(expected 3, got 2)

    打赏 评论
  • CSDN专家-黄老师 2021-06-08 21:38

    你看cv2.findContours源码,它设有3个参数,你只是设置两个参数,所以系统报错了

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    打赏 评论
  • 有问必答小助手 2021-06-09 15:23

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    打赏 评论

相关推荐 更多相似问题