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


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

目录
相关文章
|
算法 计算机视觉
图像处理之距离变换
图像处理之距离变换
398 8
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(五):18.04安装多版本CUDA
这篇博客文章介绍了在Ubuntu 18.04系统上如何安装和切换不同版本的CUDA,以及如何安装不同版本的cuDNN。
694 2
|
资源调度 算法 计算机视觉
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
1868 0
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
|
计算机视觉
OpenCV-顶帽运算(TOPHAT)
OpenCV-顶帽运算(TOPHAT)
420 0
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
3721 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
10月前
|
机器学习/深度学习 编解码 流计算
STAR: 利用时空注意力机制和动态频率损失的视频超分辨率增强框架
STAR提出了一种创新的视频超分辨率解决方案,基于文本到视频(T2V)扩散模型架构,解决现有模型过度平滑和时间一致性不足的问题。通过引入局部信息增强模块(LIEM)和动态频率(DF)损失函数,STAR有效提升了空间细节重建能力和保真度。实验表明,STAR在合成数据集和真实场景数据集上均优于现有最先进的方法,展现出优秀的细节重建、时间和空间一致性。
258 9
STAR: 利用时空注意力机制和动态频率损失的视频超分辨率增强框架
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
1020 1
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
1263 3
|
机器学习/深度学习 数据挖掘
机器学习之聚类——模糊聚类FCM
机器学习之聚类——模糊聚类FCM
606 4
|
机器学习/深度学习 人工智能 计算机视觉