Problema de compatibilidad con ContourArea en OpenCV 3

Estoy tratando de hacer un cálculo de área simple de los contornos que obtengo de findContours. Mi versión openCv es 3.1.0

Mi código es:

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' 

Parece que no puedo resolverlo, tengo la sensación de que simplemente está encasillado, aunque espero que el resultado de findContours coincida con el tipo de contourArea

Gracias 🙂

EDITAR: resulta que necesito tomar el segundo argumento de findContours

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

En la versión de la API de Opencv 3, el cv2.findContours() devuelve 3 objetos

  • imagen
  • contornos
  • jerarquía

Entonces necesitas reescribir tu statement como:

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

Este problema se debe al valor de retorno diferente de cv2.findContours en diferentes versiones de OpenCV.

En OpenCV 4.0.0, este error puede parecer 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'

Puede encontrar una explicación detallada y soluciones aquí: ¿Cómo usar `cv2.findContours` en diferentes versiones de OpenCV?