Python 3.x OpenCV多段线抛出断言失败,即使arg类型是它的类型';应该是

Python 3.x OpenCV多段线抛出断言失败,即使arg类型是它的类型';应该是,python-3.x,opencv3.0,Python 3.x,Opencv3.0,有几个线程报告了这个问题,但它们都显示了修复点列表的类型(到int32,即CV_32S)作为解决方案。下面的点列表具有适当的类型 >>> ti = np.zeros((400,400,3), np.uint8) # Test image >>> mask = np.array([[213,60],[333,240],[93,240],[150,120]], np.int32) # Test point list >>

有几个线程报告了这个问题,但它们都显示了修复点列表的类型(到int32,即CV_32S)作为解决方案。下面的点列表具有适当的类型

>>> ti = np.zeros((400,400,3), np.uint8)                # Test image
>>> mask = np.array([[213,60],[333,240],[93,240],[150,120]], np.int32)  # Test point list
>>> cv2.polylines(ti, mask, True, (255,0,0), 1)
*** cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2437: error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function 'cv::polylines'

>>> print(mask.dtype, mask.shape)
int32 (4, 2)
我尝试过更改类型(我收到不同的错误,抱怨它是错误的类型)并将其重新转换为int32。不能让它玩得很好


fillConvexPoly工作正常(这让我得到了我现在所需要的),fillPoly表现出与上述相同的问题。

对上述问题的纠正是-

cv2.polylines(ti, [mask], True, (255,0,0), 1)

以上更正如下:

cv2.polylines(ti, [mask], True, (255,0,0), 1)

谢谢如果掩码是用np.array([[[x1,y1],[x2,y2],[x3,y3]],np.int32)定义的,那么一切都很好。不知道为什么它需要一个点数组,或者从我看到的任何文档中如何推断——这是一个很好的例子,说明了SO的价值!诀窍是在掩码周围添加
[]
。这对美沙克有效!如果掩码是用np.array([[[x1,y1],[x2,y2],[x3,y3]],np.int32)定义的,那么一切都很好。不知道为什么它需要一个点数组,或者从我看到的任何文档中如何推断——这是一个很好的例子,说明了SO的价值!诀窍是在掩码周围添加
[]
。它对我有用