Dav*_*veA 19 python drawing opencv
我正在尝试使用python接口绘制一个多边形来打开opencv,cv2.我创建了一个空图像,只是一个640x480的numpy数组.我有一个我想要在图像上绘制的多边形(四点四边形)列表,但是,我似乎无法使合成器正确指示cv2四边形应该在哪里,并且我不断收到此错误:
OpenCV Error: Assertion failed (points.checkVector(2, CV_32S) >= 0) in fillConvexPoly, file .../OpenCV-2.4.0/modules/core/src/drawing.cpp, line 2017
Run Code Online (Sandbox Code Playgroud)
我的代码基本上包括以下内容:
binary_image = np.zeros(image.shape,dtype='int8')
for rect in expected:
print(np.array(rect['boundary']))
cv2.fillConvexPoly(binary_image, np.array(rect['boundary']), 255)
fig = pyplot.figure(figsize=(16, 14))
ax = fig.add_subplot(111)
ax.imshow(binary_image)
pyplot.show()
Run Code Online (Sandbox Code Playgroud)
我的预期rects列表中的'boundary'包含(x,y)点列表的值.代码打印:
[[ 91 233]
[419 227]
[410 324]
[ 94 349]]
Run Code Online (Sandbox Code Playgroud)
我认为这是多边形的点列表,但显然该列表无效points.checkvector,无论是什么.谷歌搜索该错误没有任何用处.
the*_*max 20
import numpy as np
import cv2
import matplotlib.pyplot as plt
a3 = np.array( [[[10,10],[100,10],[100,100],[10,100]]], dtype=np.int32 )
im = np.zeros([240,320],dtype=np.uint8)
cv2.fillPoly( im, a3, 255 )
plt.imshow(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
小智 10
AssertionError告诉您OpenCV需要一个带符号的32位整数.多边形点阵列应具有该特定数据类型(例如points = numpy.array(A,dtype='int32')).您也可以将其转换为函数调用(即my_array.astype('int32'))或朋友将其放置一次...
"改变
cv2.fillConvexPoly(binary_image, np.array(rect['boundary']), 255)
至
cv2.fillConvexPoly(binary_image, np.array(rect['boundary'], 'int32'), 255)
"
小智 6
我试过opencv 2.4.2和python 2.7.来自c ++界面
void fillPoly(Mat& img,
const Point** pts,
const int* npts,
int ncontours,
const Scalar& color,
int lineType=8,
int shift=0,
Point offset=Point()
)
Run Code Online (Sandbox Code Playgroud)
我们知道pts是点数组的数组,所以你应该这样改变
cv2.fillConvexPoly(binary_image, np.array([rect['boundary']], 'int32'), 255)
Run Code Online (Sandbox Code Playgroud)
将[]添加到rect ['boundary'].
| 归档时间: |
|
| 查看次数: |
26396 次 |
| 最近记录: |