programing tip

OpenCV Python : ValueError : 압축을 풀기에 너무 많은 값

itbloger 2020. 11. 17. 07:52
반응형

OpenCV Python : ValueError : 압축을 풀기에 너무 많은 값


저는 opencv 프로그램을 작성 중이고 다른 stackoverflow 질문에 대한 스크립트를 찾았습니다. Computer Vision : Masking a human hand

스크립트 답변을 실행할 때 다음 오류가 발생합니다.

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)

도움을 주시면 감사하겠습니다!


OpenCV Stack Exchange 사이트에서 답을 얻었습니다. 대답

대답:

현재 OpenCV의 마스터 브랜치를 사용하고 있다고 확신합니다. 여기서 return 문이 변경되었습니다 . 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를 사용할 수 있습니다.


이 라인을 변경해야합니다.

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

해야 할 일은 원래 다음과 같이 주어진 필수 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


이것은 모든 cv2버전 에서 작동합니다 .

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


파이썬이 맞습니다.
터플에서 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)


python3.x 및 opencv 4.1.0을 사용하고 있습니다. 다음 코드에서 오류가 발생했습니다.

cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

ERROR : too many values to Unpack

그런 다음 위의 코드가 python2.x에서 사용된다는 것을 알게 되었기 때문에 가장 왼쪽에 '_'를 하나 더 추가하여 위의 코드를 아래 코드 (python3.x)로 대체했습니다.

_,cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

참고 URL : https://stackoverflow.com/questions/25504964/opencv-python-valueerror-too-many-values-to-unpack

반응형