我尝试使用opencv中的polylines函数在图像上绘制任意四边形。
OpenCV错误:在折线文件/tmp/buildd/ros-fuerte-opencv 2 -2.4.2- 1 precise-20130312-1306/modules/core/src/d rawing.cpp第2065行中Assert失败(第页checkVector(2,CV_32S)〉= 0)
我把函数调用成这样,
cv2.polylines(img, points, 1, (255,255,255))
其中points是numpy数组,如下所示(图像大小为1280 x960):
[[910 641]
[206 632]
[696 488]
[458 485]]
img只是一个普通的图像,我可以imshow.目前我只是画线之间的这些点自己,但我正在寻找一个更优雅的解决方案.
我应该如何纠正这个错误?
8条答案
按热度按时间pkbketx91#
在我的例子中,问题是
numpy.array
默认创建int64
位数。所以我必须显式地将其转换为int32
:(看起来像是cv2 python绑定中的一个bug,它应该已经验证了
dtype
)y0u0uwnf2#
这个函数没有足够好的文档记录,错误也不是很有用。在任何情况下,
cv2.polylines
需要一个点列表,只需将您的行更改为:上面的示例将打印以下图像(重新缩放):
yb3bgrhw3#
错误提示你的数组应该是2维的。因此,按照如下方式重新整形数组:
那就好办了。
另外,jabaldonedo提供的答案对我来说也很好。
g6ll5ycj4#
用
cv2.fillPoly( im, np.int32([points]))
替换cv2.fillPoly( im, np.int32(points))
,它会工作。wfypjpf45#
我也遇到了同样的问题,解决方案是创建一个1行,2列和- 1深度的数组,- 1表示未知的维度,因此numpy将为数组分配方便的深度。如果你创建的数组超过1行和2列,它将显示错误。
当您创建的数组不是int 32类型时,也会出现此错误
wsxa1bj16#
xiozqbni7#
正式文件提供解释,需要重新塑造
j13ufse28#
vertices = np.array(pts,dtype=np.int32)适合我