Vraag OpenCV python: ValueError: te veel waarden om uit te pakken


Ik schrijf een opencv-programma en ik vond een script op een andere stackoverflow-vraag: Computer Vision: een menselijke hand maskeren

Wanneer ik het gescripte antwoord voer, krijg ik de volgende foutmelding:

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

De code:

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)

Alle hulp wordt gewaardeerd!


50
2017-08-26 11:39


oorsprong


antwoorden:


Ik kreeg het antwoord van de OpenCV Stack Exchange-site. Antwoord

HET ANTWOORD:

Ik wed dat je de huidige OpenCV's master branch gebruikt: hier zijn de return statements veranderd, zie http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours.

Wijzig dus de bijbehorende regel om te lezen:

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

Of: aangezien de huidige trunk nog steeds niet stabiel is en u waarschijnlijk nog meer problemen zult tegenkomen, wilt u mogelijk de huidige stabiele versie 2.4.9 van OpenCV gebruiken.


108
2017-08-26 15:50



Je moet deze regel veranderen;

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

12
2018-02-06 20:54



Python heeft gelijk.
je kunt niet 3 waarden uit de turple uitpakken en ze in een turtle van twee plaatsen contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

gebruik

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


1
2018-03-16 14:11



Het enige wat u hoeft te doen is gewoon '_' toevoegen waar u niet de vereiste var gebruikt, oorspronkelijk gegeven door:

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

naar

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

Hier wordt het originele document gegeven: https://docs.opencv.org/3.1.0/d4/d73/tutorial_py_contours_begin.html


1
2018-06-06 04:49