demasiados valores para desempaquetar llamando a cv2.findContours

Soy un principiante de python. Estaba tratando de ejecutar este código:

#applying closing function kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7)) closed = cv2.morphologyEx(th3, cv2.MORPH_CLOSE, kernel) #finding_contours (cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in cnts: peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.02 * peri, True) cv2.drawContours(frame, [approx], -1, (0, 255, 0), 2) 

cuando convoco el mask.py tengo este ValueError:

 Traceback (most recent call last): File "mask.py", line 22, in  (cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ValueError: too many values to unpack 

Qué está mal con este código ?

Parece que está utilizando OpenCV versión 3.x, mientras escribe el código destinado a la twig 2.x. Hubo algunos cambios de API entre esas dos twigs. Ya que está usando Python, tiene una útil ayuda disponible; asegúrese de usarla, junto con la documentación.

OpenCV 2.x:

 >>> import cv2 >>> help(cv2.findContours) Help on built-in function findContours in module cv2: findContours(...) findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy 

OpenCV 3.x:

 >>> import cv2 >>> help(cv2.findContours) Help on built-in function findContours: findContours(...) findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy 

Esto significa que en su secuencia de comandos, la forma correcta de llamar a findContours cuando use OpenCV 3.x sería algo como

 (_, cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

ACTUALIZACIÓN (diciembre de 2018)

En OpenCV 4.x, findContours devuelve 2 valores.

 >>> help(cv2.findContours) Help on built-in function findContours: findContours(...) findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy . @brief Finds contours in a binary image.