web-dev-qa-db-fra.com

Contours OpenCV - besoin de plus de 2 valeurs pour décompresser

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?.

débutant

11

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)
29
Warren Weckesser

Il retourne maintenant trois valeurs:

findContours(image, mode, method[, contours[, hierarchy[, offset]]])

retour image, contours, hiérarchie 

3
Yiming Zhou

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)
3
rohan goli

-findContours ne renvoie que deux valeurs. alors utilisez juste,

Tellement utilisé

contours, hierarchy = cv2.findContours (thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

2
sharat kanthi

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)
0
Vishal

Cela devrait aider:

image, contours, hierarchy = cv2.findContours(thresh.copy(),
                                              cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
0
Pinaki Saha

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

0
srbh rthr