Подтвердить что ты не робот

OpenCV python: ValueError: слишком много значений для распаковки

Я пишу программу opencv, и я нашел script в другом вопросе stackoverflow: Компьютерное зрение: Маскировка человеческой руки

Когда я запускаю сценарий, я получаю следующую ошибку:

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)

Любая помощь приветствуется!

4b9b3361

Ответ 1

Я получил ответ с сайта OpenCV Stack Exchange. Answer

ОТВЕТ:

Бьюсь об заклад, вы используете текущую главную ветку 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.

Ответ 2

Вы должны изменить эту строку;

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

Ответ 3

Что вам нужно сделать, это просто добавить '_', где вы не используете требуемый var, изначально заданный:

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

в

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

Здесь приведен оригинальный документ: https://docs.opencv.org/3.1.0/d4/d73/tutorial_py_contours_begin.html.

Ответ 4

питон прав.
Вы не можете распаковать 3 значения из набора и поместить их в набор из двух contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

использование

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

Ответ 5

Это работает во всех версиях cv2:

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