12

我有以下代码:

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)

然后我得到一个失败的断言。cv2.fillConvexPoly如果我使用一个没有 dtype的 numpy 数组,这似乎与失败的断言相同numpy.int32。他们cv2.fillPolycv2.fillConvexPoly第二个参数是否期望不同的数据类型?如果是这样,我应该使用cv2.fillPoly什么?

4

1 回答 1

29

cv2.fillPolycv2.fillConvexPoly为其点数组使用不同的数据类型,因为fillConvexPoly只绘制一个多边形并fillPoly绘制它们的(python)列表。因此,

cv2.fillConvexPoly(ar, triangle, 1)
cv2.fillPoly(ar, [triangle], 1)

是调用这两种方法的正确方法。如果你有squarehexagon点数组,你可以使用

cv2.fillPoly(ar, [triangle, square, hexagon], 1)

绘制所有三个。

于 2013-07-10T23:50:14.220 回答