python ओपनसीवी पायथन: ValueError: अनपॅक करने के लिए बहुत सारे मूल्य



opencv image-processing (4)

मैं एक ओपनसीवी प्रोग्राम लिख रहा हूं और मुझे एक और स्टैक ओवरफ्लो प्रश्न पर एक स्क्रिप्ट मिली: कंप्यूटर विजन: एक मानव हाथ मास्किंग

जब मैं स्क्रिप्ट किए गए उत्तर को चलाता हूं, तो मुझे निम्न त्रुटि मिलती है:

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)

किसी भी मदद की सराहना की है!


आपको यह लाइन बदलनी है;

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


मुझे ओपनसीवी स्टैक एक्सचेंज साइट से जवाब मिला। Answer

उत्तर:

मुझे यकीन है कि आप वर्तमान ओपनसीवी की मास्टर शाखा का उपयोग कर रहे हैं: यहां रिटर्न स्टेटमेंट बदल गए हैं, 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)

या: चूंकि वर्तमान ट्रंक अभी भी स्थिर नहीं है और आप शायद कुछ और समस्याओं में भाग लेंगे, तो आप ओपनसीवी के वर्तमान स्थिर संस्करण 2.4.9 का उपयोग करना चाह सकते हैं।


पायथन सही है।
आप टर्पल से 3 मानों को अनपैक नहीं कर सकते हैं और उन्हें दो contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) एक तिजोरी में रख सकते हैं 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)





image-processing