drawContours的数据类型错误,除非我pickle/unpickle firs

2024-10-04 05:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在Windows上的python2.7.3上,opencv2.4.3遇到了一个有趣的错误。当我尝试使用drawcurtours时,我得到一个“TypeError:contours data type=5 is not supported”错误,除非我先pickle/unpickle轮廓。

这不起作用(我得到“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) 

但这确实有效:

^{pr2}$

其他人有没有看到这种行为,或者我遗漏了一些明显的东西?我是python/opencv新手,所以很可能是这样。

编辑:刚刚在我的Mac上测试过,两种情况都很好。可能只是Windows的问题?


Tags: srcdataiswindowstype错误npnot
3条回答

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

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

我把要点投给uint32:

use_points = np.uint32(original_points)

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

^{pr2}$

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

在使用findContours和converxhull中的等高线时,在获得opencv2.4.3之后,我遇到了同样的问题。由于我不想降级,将contours数组元素强制转换为int可以暂时解决问题。在

contours, _ = cv2.findContours(noBg,cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE,offset = (0,0))
hull_contour = cv2.convexHull(contours[0].astype('int'))

相关问题 更多 >