J'essaie d'implémenter des contours en utilisant le code suivant.
im = cv2.imread('C:\Users\Prashant\Desktop\T.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img = cv2.drawContour(im, contours, -1, (0,255,0), 3)
cv2.imshow('Image1',img)
mais je reçois continuellement l'erreur suivante.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/Prashant/.spyder2/.temp.py", line 17, in <module>
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: need more than 2 values to unpack
la fonction findContours a-t-elle besoin de plus d'arguments? Que puis-je faire pour la corriger?.
Dans OpenCV 2, findContours
ne renvoie que deux valeurs, contours
et hierarchy
. L'erreur se produit lorsque python tente d'affecter ces deux valeurs aux trois noms donnés à gauche dans cette instruction:
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Il retourne maintenant trois valeurs:
findContours(image, mode, method[, contours[, hierarchy[, offset]]])
retour image, contours, hiérarchie
findContours ne renvoie que trois valeurs: image, contours et hiérarchie dans opencv3
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
-findContours ne renvoie que deux valeurs. alors utilisez juste,
Tellement utilisé
contours, hierarchy = cv2.findContours (thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
En 2019, nous avons trois versions d'OpenCV (OpenCV2, OpenCV3 et OpenCV4).
OpenCV4 et OpenCV2 ont un comportement similaire (renvoyer deux valeurs à partir de cv2.findContours
). Alors que OpenCV3 renvoie trois valeurs.
if cv2.getVersionMajor() in [2, 4]:
# OpenCV 2, OpenCV 4 case
contour, hier = cv2.findContours(
thresh.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
else:
# OpenCV 3 case
image, contour, hier = cv2.findContours(
thresh.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
Cela devrait aider:
image, contours, hierarchy = cv2.findContours(thresh.copy(),
cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Version Python 2.7.14 (v2.7.14: 84471935ed, 16 sep 2017, 20:25:58) [MSC v.1500 64 bits (AMD64)]
Version NumPy: 1.16.1
version argparse: 1.1
Version CV2: 4.0.0
Traceback (dernier appel le plus récent):
Fichier "omr.py", ligne 254, dans
main()
Fichier "omr.py", ligne 237, dans main
answers, im = get_answers(args.input)
Fichier "omr.py", ligne 188, dans get_answers
contours = get_contours(im)
Fichier "omr.py", ligne 26, dans get_contours
im2, contours, hierarchy =cv2.findContours(image_gray,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: besoin de plus de 2 valeurs pour décompresser
Pour résoudre ce problème, supprimez "im2" de la ligne 26 .. Comme dans OpenCv version 3.0 ou supérieure, la fonction "findContours" ne renvoie que 2 valeurs .. l'instruction doit donc être
contours, hierarchy = cv2.findContours (image_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
et aussi mettre à jour votre version OpenCv