Ich schreibe ein OpenCV-Programm und habe ein Skript für eine andere Frage zum Stapelüberlauf gefunden: Computer Vision: Maskieren einer menschlichen Hand
Wenn ich die Skriptantwort ausführe, wird folgende Fehlermeldung angezeigt:
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
Der 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)
Jede Hilfe wird geschätzt!
python
opencv
image-processing
ahmadux
quelle
quelle
Antworten:
Ich habe die Antwort von der OpenCV Stack Exchange-Site erhalten. Antworten
DIE ANTWORT:
quelle
Dies funktioniert in allen
cv2
Versionen:contours, hierarchy = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2:]
Erläuterung : Mit using nehmen
[-2:]
wir grundsätzlich die letzten beiden Werte aus dentuple
zurückgegebenen voncv2.findContours
. Da in einigen Versionen zurückgegeben wird(image, contours, hierarchy)
und in anderen Versionen zurückgegeben wird(contours, hierarchy)
,contours, hierarchy
sind immer die letzten beiden Werte.quelle
Sie müssen diese Zeile ändern;
quelle
Ich verwende python3.x und opencv 4.1.0. Im folgenden Code wurde ein Fehler angezeigt:
dann habe ich erfahren, dass der obige Code in python2.x verwendet wird. Also habe ich den obigen Code durch den folgenden ersetzt (IN python3.x), indem ich ein weiteres '_' in der linken Seite hinzugefügt habe
quelle
Sie müssen lediglich '_' hinzufügen, wenn Sie nicht die erforderliche Variable verwenden, die ursprünglich angegeben wurde von:
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
zu
_ , contours, _ = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Hier wird das Originaldokument angegeben: https://docs.opencv.org/3.1.0/d4/d73/tutorial_py_contours_begin.html
quelle
Python ist richtig.
Sie können nicht 3 Werte aus dem Turple auspacken und in einen Turple von zwei legen
contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
verwenden
img, contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
quelle
Keine große Sache, nur verwenden Sie möglicherweise open-cv 3.something, das an der Fehlerstelle 3 Werte zurückgibt, und Sie müssen nur 2 abfangen. Fügen Sie einfach eine Zufallsvariable vor der Konturvariablen hinzu.
quelle