提问者:小点点

OpenCV python:ValueError:要解压缩的值太多


我正在写一个opencv程序,我在另一个问题上找到了一个脚本:计算机视觉:掩蔽人手

当我运行脚本答案时,我得到以下错误:

Traceback (most recent call last):
    File "skinimagecontour.py", line 13, in <module>
    contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ValueError: too many values to unpack

代码:

import sys
import numpy
import cv2

im = cv2.imread('Photos/test.jpg')
im_ycrcb = cv2.cvtColor(im, cv2.COLOR_BGR2YCR_CB)

skin_ycrcb_mint = numpy.array((0, 133, 77))
skin_ycrcb_maxt = numpy.array((255, 173, 127))
skin_ycrcb = cv2.inRange(im_ycrcb, skin_ycrcb_mint, skin_ycrcb_maxt)
cv2.imwrite('Photos/output2.jpg', skin_ycrcb) # Second image

contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, c in enumerate(contours):
    area = cv2.contourArea(c)
    if area > 1000:
        cv2.drawContours(im, contours, i, (255, 0, 0), 3)
cv2.imwrite('Photos/output3.jpg', im)

感谢您的帮助!


共3个答案

匿名用户

我从OpenCV堆栈交换站点得到了答案。答复

答案是:

我打赌您使用的是当前OpenCV的主分支:这里的返回语句已更改,请参阅http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours.

因此,将相应的行更改为:

_, contours, _= cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

或者:由于当前主干仍然不稳定,您可能会遇到更多问题,您可能希望使用OpenCV当前的稳定版本2.4.9。

匿名用户

这适用于所有cv2版本:

contours, hierarchy = cv2.findContours(
    skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2:]

说明:通过使用[-2:],我们基本上是从cv2返回的元组中获取最后两个值。查找目录。因为在某些版本中,它返回(图像、轮廓、层次),而在其他版本中,它返回(轮廓、层次)轮廓、层次始终是最后两个值。

匿名用户

你必须改变这一行;

image, contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)