2017-05-14 82 views
2

我是一名python初学者。我试图运行此代码:当我召唤我得到这个ValueError异常的mask.py太多的值来解压调用cv2.findContours

#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) 

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

什么是错的代码?

+0

你试过去掉圆括号吗? cnts,heir = cv2.findContours(closed.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) – user1269942

+0

哪个版本的OpenCV?我假设你正在使用3.x,但是编写代码意味着2.x分支。有一些API更改 - 其中之一是'findContours'返回3,而不是原始的2个值。阅读文档! –

+0

可能的重复http://stackoverflow.com/questions/39598724/convert-knn-train-from-opencv-3-to-2 –

回答

4

看来您正在使用OpenCV版本3.x,同时编写用于2.x分支的代码。这两个分支之间有一些API更改。由于您使用的是Python,因此您可以获得方便的帮助 - 确保将其与文档一起使用。

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 

这意味着,在你的脚本正确的方法来调用findContours在使用OpenCV的3.X会是这样的

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

谢谢DanMašek。现在,该程序正在运行:) –

相关问题