web-dev-qa-db-fra.com

problème de compatibilité avec contourArea dans openCV 3

J'essaie de faire un calcul de zone simple des contours que j'obtiens de findContours. Ma version openCv est 3.1.0

Mon code est:

cc = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.contourArea(cc[0])

error: 'C:\\builds\\master_PackSlaveAddon-win32-vc12-static\\opencv\\modules\\imgproc\\src\\shapedescr.cp...: error: (-215) npoints >= 0 && (depth == CV_32F || depth == CV_32S) in function cv::contourArea\n'

Je ne peux pas sembler le résoudre, j'ai l'impression que sa transtypage est juste, je m'attends à ce que le résultat findContours corresponde au type de contourArea

Merci :)

EDIT: il s'avère que je dois prendre le 2ème argument de findContours

 im2, cc, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
18
YNWA

Dans la version API d'Opencv 3, la cv2.findContours() renvoie 3 objets

  • image
  • contours
  • hiérarchie

Vous devez donc réécrire votre déclaration comme suit:

image, contours, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
31
ZdaR

Ce problème est dû à la valeur de retour différente de cv2.findContours dans différentes versions d'OpenCV.

Dans OpenCV 4.0.0, cette erreur peut ressembler à cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\imgproc\src\convhull.cpp:137: error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::convexHull'

Vous pouvez trouver une explication détaillée et des solutions ici: Comment utiliser `cv2.findContours` dans différentes versions d'OpenCV?

2
Qin Heyang