web-dev-qa-db-fra.com

Erreur lors de l'utilisation de cv2.findContours (), avec python

J'ai récemment commencé à apprendre OpenCV sur Python.

Je fais référence au tutoriel this ici, pour obtenir de l'aide sur l'obtention des contours d'une image.

Mon code est -

import cv2
import numpy as np

img = cv2.imread('shapes.jpg', 0)
img = cv2.medianBlur(img, 5)
thresh =     cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY,11,2)

cv2.imshow('Thresh', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

image, contours, hierarchy =   cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(image, countours, -1, (0,255,0), 3)
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

La première image seuil apparaît, mais après cela, je reçois un message d'erreur comme

Traceback (most recent call last):
  File "contours.py", line 21, in <module>
    image, contours, hierarchy =     cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
ValueError: need more than 2 values to unpack

Toute aide pour résoudre ce problème sera appréciée.

9
Souvik Saha

Regardez l'exemple this .

cv2.findContours(...)

ne renvoie que deux objets, vous essayez de le décompresser en trois.

changez cette ligne en ceci:

contours, hierarchy =   cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

et ça devrait marcher.

15
will

Le didacticiel que vous avez lié concerne OpenCV version 3. cv2.findContours renvoie 3 objets dans cette version.

Donc, mettez à jour opencv ou utilisez la solution par @will.

8
dunder