9

我在 Windows 上的 python 2.7.3 上使用 opencv 2.4.3 遇到了一个有趣的错误。尝试使用 drawContours 时,我会收到“TypeError:不支持轮廓数据类型 = 5”错误,除非我先腌制/取消腌制轮廓。

这不起作用(我得到“TypeError:contours data type = 5 is not supported”):

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) 

但这确实有效:

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) 

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

编辑:刚刚在我的 Mac 上进行了测试,两种情况都可以正常工作。也许只是一个Windows问题?

4

3 回答 3

8

如果您降级到 opencv 2.4.2,这将起作用。这似乎是两周前刚刚发布的 2.4.3 的一个错误。

于 2012-11-15T11:02:48.960 回答
4

在使用 findContours 和 convexHull 的轮廓时,我在获得 OpenCV 2.4.3 后遇到了同样的问题。由于我不想降级,将轮廓数组元素转换为 int 可以暂时解决问题。

contours, _ = cv2.findContours(noBg,cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE,offset = (0,0))
hull_contour = cv2.convexHull(contours[0].astype('int'))
于 2012-11-19T23:02:06.597 回答
0

我在绘制折线时遇到了类似的问题。它需要 32 位整数。

我将要点投射到 uint32:

use_points = np.uint32(original_points)

问题是它需要 32 位的有符号整数,而不是无符号整数。这是代码中的一个微妙之处,所以很难找到,但后来这奏效了:

use_points = np.int32(original_points)

只是使用np.int32而不是np.uint32

于 2013-12-02T13:39:39.230 回答