除非我先pickle/unpickle,否则drawContours数据类型错误

A_R*_*ert 9 python opencv

我在Windows上的python 2.7.3上使用opencv 2.4.3遇到了一个有趣的错误.当试图使用drawContours时,我得到一个"TypeError:不支持轮廓数据类型= 5"错误,除非我首先挑选/取消轮廓.

这不起作用(我得到"TypeError:不支持轮廓数据类型= 5"):

noBg = cv2.blur(src, (5,5))
noBg = cv2.inRange(noBg, np.array([80, 0, 200], np.uint8), np.array([255, 50, 255], np.uint8)) 
noBg = np.invert(noBg)
contours, hierarchy = cv2.findContours(noBg, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(src, contours, -1, (0,255,0), 3) 
Run Code Online (Sandbox Code Playgroud)

但这确实有效:

noBg = cv2.blur(src, (5,5))
noBg = cv2.inRange(noBg, np.array([80, 0, 200], np.uint8), np.array([255, 50, 255], np.uint8)) 
noBg = np.invert(noBg)
contours, hierarchy = cv2.findContours(noBg, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

tmp = cPickle.dumps(contours)    
contours = cPickle.loads(tmp)

cv2.drawContours(src, contours, -1, (0,255,0), 3) 
Run Code Online (Sandbox Code Playgroud)

有没有其他人看到这种行为或我错过了一些明显的东西?我是python/opencv的新手,所以很可能就是这种情况.

编辑:刚在我的Mac上测试过,两种情况都可以.也许只是一个Windows问题?

小智 8

如果你降级到opencv 2.4.2,这将有效.这似乎是两周前刚刚发布的2.4.3的漏洞.