Errores de findContours y drawContours en opencv 3 beta / python

Intento ejecutar un ejemplo desde aquí .

import numpy as np import cv2 img = cv2.imread('final.jpg') imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(imgray,127,255,0) contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0,255,0), 3) 

El error es

  Traceback (most recent call last): File "E:\PC\opencv3Try\findCExample.py", line 7, in  contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) ValueError: too many values to unpack (expected 2) 

Si elimino “jerarquía”, el error surge en drawContours:

 TypeError: contours is not a numpy array, neither a scalar 

Si uso contornos [0] en drawContours

 cv2.error: E:\opencv\opencv\sources\modules\imgproc\src\drawing.cpp:2171: error: (-215) npoints > 0 in function cv::drawContours 

¿Qué problemas podrían estar aquí?

opencv 3 tiene una syntax ligeramente modificada aquí, los valores de retorno difieren:

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

Siguiendo la respuesta de berak, solo agregar [-2:] a las findContours() a findContours() hace que funcionen para OpenCV 2.4 y 3.0:

 contours, hierarchy = cv2.findContours(...)[-2:] 

Me encuentro con el mismo problema antes y uso este código para solucionarlo. Im usando 3.1 de todos modos.

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