我有以下代码:
import cv2
import numpy
ar = numpy.zeros((10,10))
triangle = numpy.array([ [1,3], [4,8], [1,9] ], numpy.int32)
如果我像这样使用cv2.fillConvexPoly:
cv2.fillConvexPoly(ar, triangle, 1)
然后结果如预期。但是,如果我尝试:
cv2.fillPoly(ar, triangle, 1)
然后我得到一个失败的断言。如果我使用没有dtype cv2.fillConvexPoly
的{{1}}的numpy数组,这似乎与失败的断言完全相同。 numpy.int32
和cv2.fillPoly
期望第二个参数有不同的数据类型吗?如果是这样,我应该为cv2.fillConvexPoly
使用什么?
答案 0 :(得分:19)
cv2.fillPoly
和cv2.fillConvexPoly
为其点数组使用不同的数据类型,因为fillConvexPoly
只绘制一个多边形,fillPoly
绘制(python)列表。因此,
cv2.fillConvexPoly(ar, triangle, 1)
cv2.fillPoly(ar, [triangle], 1)
是调用这两种方法的正确方法。如果您有square
和hexagon
点数组,则可以使用
cv2.fillPoly(ar, [triangle, square, hexagon], 1)
画三个。