cv2.fillPoly的大坑

简介: 在labelme标注图像后,想将其json文件转化为png的图像,我们这里使用cv2.fillPoly()进行转化,但是遇到了一个巨坑

labelme标注图像后,想将其json文件转化为png的图像,我们这里使用cv2.fillPoly()进行转化,但是遇到了一个巨坑,问题描述如下所示:


points = []
for shape in shapes:
     points.append(np.array(shape['points'],np.int8))
image = cv2.fillPoly(image, points, color=(255, 255, 255))
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-n4ekh6o5\opencv\modules\imgproc\src\drawing.cpp:2395: error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function 'cv::fillPoly'


传入的points数据形式为以下形式:


points=[[[250, 200], [300, 100], [750, 800], [100, 1000]],[[1000, 200], [1500, 200], [1500, 400], [1000, 400]]]


查看**cv2.fillPoly()**源代码之后,发现其实目前的传入数据格式是没有问题的。


def fillPoly(img, pts, color, lineType=None, shift=None, offset=None): # real signature unknown; restored from __doc__
    """
    fillPoly(img, pts, color[, lineType[, shift[, offset]]]) -> img
    .   @brief Fills the area bounded by one or more polygons.
    .   
    .   The function cv::fillPoly fills an area bounded by several polygonal contours. The function can fill
    .   complex areas, for example, areas with holes, contours with self-intersections (some of their
    .   parts), and so forth.
    .   
    .   @param img Image.
    .   @param pts Array of polygons where each polygon is represented as an array of points.
    .   @param color Polygon color.
    .   @param lineType Type of the polygon boundaries. See #LineTypes
    .   @param shift Number of fractional bits in the vertex coordinates.
    .   @param offset Optional offset of all points of the contours.
    """
    pass


在网上查阅一堆资料后,在网上查看相关的问题描述,但是没有找到解决方案。甚至开始怀疑数据格式的问题,在经过一番调试后,终于发现问题的所在:


points.append(np.array(shape['points'],np.int8))


这行代码看起来没有问题,但是问题就出在np.int8,有些小数据可能不会出现问题,但是对于大图像标注来说,它不能满足数据的存储空间,所以将其改为以下形式及就没有出现问题了:


points.append(np.array(shape['points'], np.int32))


参考文献


https://blog.csdn.net/u012135425/article/details/84983265


如果对您有帮助的话,就帮忙点个👍吧。

目录
相关文章
|
1月前
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
109 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
6月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
77 0
|
6月前
|
存储 编解码 监控
OpenCV这么简单为啥不学——2.1、imwrite逐帧保存图片
OpenCV这么简单为啥不学——2.1、imwrite逐帧保存图片
120 0
|
6月前
|
计算机视觉 索引
OpenCV(三十二):轮廓检测
OpenCV(三十二):轮廓检测
67 0
|
6月前
|
监控 API 图形学
OpenCV这么简单为啥不学——1、基础环境与imread函数
OpenCV这么简单为啥不学——1、基础环境与imread函数
71 0
|
6月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
50 0
|
6月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.9、cvtColor颜色空间转换(全色值效果演示)
OpenCV这么简单为啥不学——1.9、cvtColor颜色空间转换(全色值效果演示)
60 0
|
6月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度
OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度
80 0
|
6月前
|
计算机视觉
CV项目肢体动作识别(三)内附完整代码和详细讲解
首先我还是给出完整的代码,然后再进行详细的讲解。这一次我们用模块化的思想,把一个功能模块化(moudle),这种思想在工程中非常常见,在分工中你需要做好自己的工作就可以,最后再调用这些模块。
|
计算机视觉
openCV黑帽操作
openCV黑帽操作
55 1