opencv 如何将二进制掩码(分割)转换为YOLO分割文本文件?

2jcobegt  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(159)

我已经找到了一个解决方案,但问题是我有太多的点,我想减少他们。这不是一个主要问题,但我仍然希望有更少的点。
我已经在这里搜索了其他答案,但我没有找到任何有关我的问题。我已经附上了一个样品面具作为参考。
The sample binarised mask
为了清楚起见,我已经用Python编写了一个脚本来实现这一点。我采取的步骤是:
1.将彩色蒙版转换为二值化蒙版(因为我只有一个类)。
1.在图像上应用轮廓并找到掩模的边缘点。
1.对检测到的轮廓点进行细化。
1.根据Angular 的主要变化,只记下这些点。
1.以YOLO分割文本格式保存所有点(cls_name x1y1 x2 y2 .... xn yn)

**但最后我发现了一个可怕的现实,因为它考虑了外部边界,如果标签都重叠,它就变成了一个包含不需要区域的大斑点。所以我不得不放弃这个,并在UNET中使用这些掩码,在那里我得到了我想要的输出。

mrphzbgm

mrphzbgm1#

如果你想减少点数,你可以使用cv.approxPolyDP()
这不是一个很聪明的算法,但它会做。它将保留或删除某些点,具体取决于删除每个点后轮廓的相似程度。它不会插入或移动任何点。

epsilon = 0.1 * cv.arcLength(cnt, True)
approx = cv.approxPolyDP(cnt, epsilon, True)

字符串
选择较小的epsilon(减小因子)以获得更准确的结果,即而没有去除那么多的点。
以下是官方教程:
https://docs.opencv.org/4.x/dd/d49/tutorial_py_contour_features.html

相关问题