aaqbb 发表于 2024-3-14 12:41

[已解决]深度学习相关:将mask图片标注转为yolov8_seg的txt标注

本帖最后由 aaqbb 于 2024-3-15 14:03 编辑

求一个将png格式的标注转为yolov8的语义分割标注的python代码
png标注如下图所示,数据集是这个 (https://bj.bcebos.com/paddlex/examples/meter_reader/datasets/meter_seg.tar.gz)
https://s21.ax1x.com/2024/03/13/pFccj2D.png
yolov8 segment标注格式如下所示,相关链接 (https://docs.ultralytics.com/zh/datasets/segment/#ultralytics-yolo-format)
```
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>
```

TGN 发表于 2024-3-14 13:01

zhangcaicai 发表于 2024-3-14 13:48

这个简单,可以使用opencv把mask的轮廓找出来,再转成坐标点,最后按照自己的格式写入txt就好了
例如    img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
    img_h,img_w = img.shape[:2]
    contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    approx_contours = []
    for contour in contours:
      epsilon = 0.001 * cv2.arcLength(contour, True)
      approx = cv2.approxPolyDP(contour, epsilon, True)
      approx_contours.append(approx)

aaqbb 发表于 2024-3-14 14:01

本帖最后由 aaqbb 于 2024-3-14 14:07 编辑

zhangcaicai 发表于 2024-3-14 13:48
这个简单,可以使用opencv把mask的轮廓找出来,再转成坐标点,最后按照自己的格式写入txt就好了
例如
那类别怎么处理呢,我这有三个类别
```
background
pointer
scale
```
大佬可以给个完整的代码吗,可以去我的悬赏贴回复(https://www.52pojie.cn/thread-1900124-1-1.html)悬赏额要多少都可以{:1_923:}

zhangcaicai 发表于 2024-3-14 15:28

假设你已经获取了物体的轮廓坐标点[,,...],那么你需要把轮廓坐标点做归一化处理,然后你的类别有,对应的class-index是0,1,2
然后你需要把标签信息输入txt中,格式类似<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>
例子:1,x1,y1,x2,y2,x3,y3......

zhangcaicai 发表于 2024-3-14 15:35

你提供的png图片是全黑的,并没有标注信息

aaqbb 发表于 2024-3-14 16:09

zhangcaicai 发表于 2024-3-14 15:35
你提供的png图片是全黑的,并没有标注信息

有标注的,我在网上搜的说L模式的mask图就是没有颜色的

aaqbb 发表于 2024-3-14 20:21

我把原来的全黑转成彩色了
https://s21.ax1x.com/2024/03/14/pFgQaRS.png

durhummer 发表于 2024-3-15 13:00

我现在还是弄imagelab 一个一个的标注。

aaqbb 发表于 2024-3-15 14:04

在https://github.com/matthewkenely/mask-to-annotation找到转换代码了
页: [1]
查看完整版本: [已解决]深度学习相关:将mask图片标注转为yolov8_seg的txt标注