J'écris un programme ouvert et j'ai trouvé un script sur une autre question de stackoverflow: Computer Vision: Masquer une main humaine
Lorsque j'exécute la réponse par script, le message d'erreur suivant s'affiche:
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
Le 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)
Toute aide est appréciée!
J'ai eu la réponse du site OpenCV Stack Exchange. réponse
LA RÉPONSE:
Je parie que vous utilisez la branche principale d’OpenCV actuelle: ici, les instructions de retour ont changé, voir http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours .
Ainsi, modifiez la ligne correspondante pour lire:
_, contours, _= cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Ou: comme le tronc actuel n'est toujours pas stable et que vous rencontrerez probablement d'autres problèmes, vous pouvez utiliser la version stable actuelle d'OpenCV 2.4.9.
Vous devez changer cette ligne.
image, contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Cela fonctionne dans toutes les versions cv2
:
contours, hierarchy = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2:]
La chose que vous devez faire est simplement d'ajouter '_' là où vous n'utilisez pas la variable requise, donnée à l'origine par:
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
à
_ , contours, _ = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Ici, le document original est donné: https://docs.opencv.org/3.1.0/d4/d73/tutorial_py_contours_begin.html
python a raison.
vous ne pouvez pas décompresser 3 valeurs de la turple et les placer dans une turple de deux contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
utilisation
img, contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
J'utilise python3.x et opencv 4.1.0, j'ai eu une erreur dans le code suivant:
cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
ERROR : too many values to Unpack
alors je suis venu pour savoir que le code ci-dessus est utilisé dans python2.x SO je viens de remplacer le code ci-dessus par au-dessous d'un (IN python3.x) en ajoutant un '_' de plus dans le côté gauche regarde
_,cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)