0


YOLO语义分割标注文件txt还原到图像中

最近做图像分割任务过程中,使用labelme对图像进行标注,得到的数据文件是json,转换为YOLO训练所需的txt格式后,想对标注文件进行检验,即将txt标注文件还原到原图像中,下面是代码:

  1. import cv2
  2. import numpy as np
  3. '''
  4. 读取txt标注文件及原图
  5. '''defread_txt_labels(txt_file):"""
  6. 从 txt 标注文件中读取标签
  7. :param txt_file: txt 标注文件路径
  8. :return: 标签列表
  9. """withopen(txt_file,"r")as f:
  10. labels =[]for line in f.readlines():
  11. label_data = line.strip().split(" ")
  12. class_id =int(label_data[0])# 解析边界框坐标
  13. coordinates =[float(x)for x in label_data[1:]]
  14. labels.append([class_id, coordinates])return labels
  15. defdraw_labels(image, labels):"""
  16. 在图像上绘制分割区域
  17. :param image: 图像
  18. :param labels: 标签列表
  19. """for label in labels:
  20. class_id, coordinates = label
  21. # 将坐标转换为整数并重新塑形为多边形
  22. points =[(int(x * image.shape[1]),int(y * image.shape[0]))for x, y inzip(coordinates[::2], coordinates[1::2])]# 使用多边形填充
  23. cv2.fillPoly(image,[np.array(points)],(0,255,0))# 绿色表示分割区域defmain():"""
  24. 将 YOLO 语义分割的 txt 标注文件还原到原图中
  25. """# 读取图像
  26. image = cv2.imread("D:\Desktop\gasdata\images\\0002.jpg")# 读取 txt 标注文件
  27. txt_file ="D:\Desktop\gasdata\\txt\\0002.txt"
  28. labels = read_txt_labels(txt_file)# 绘制分割区域
  29. draw_labels(image, labels)# 获取窗口大小
  30. window_size =(1600,800)# 您可以根据需要调整窗口大小# 调整图像大小
  31. image = cv2.resize(image, window_size)# 创建一个与窗口大小相同的黑色图像
  32. background = np.zeros((window_size[1], window_size[0],3), np.uint8)# 将图像放置在黑色背景的中心
  33. image_x =int((window_size[0]- image.shape[1])/2)
  34. image_y =int((window_size[1]- image.shape[0])/2)
  35. background[image_y:image_y + image.shape[0], image_x:image_x + image.shape[1]]= image
  36. cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
  37. cv2.imshow("Image", image)
  38. cv2.waitKey(0)if __name__ =="__main__":
  39. main()

效果图:

在这里插入图片描述

如果仅对轮廓进行标注,不填充整个区域,则只需修改draw_labels函数:

  1. defdraw_labels(image, labels):"""
  2. 在图像上绘制分割区域轮廓
  3. :param image: 图像
  4. :param labels: 标签列表
  5. """for label in labels:
  6. class_id, coordinates = label
  7. # 将坐标转换为整数并重新塑形为多边形
  8. points =[(int(x * image.shape[1]),int(y * image.shape[0]))for x, y inzip(coordinates[::2], coordinates[1::2])]# 使用多边形绘制轮廓
  9. cv2.polylines(image,[np.array(points)],True,(0,255,0),2)# 红色表示分割区域轮廓

效果图:

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_45625499/article/details/136606411
版权归原作者 万里守约 所有, 如有侵权,请联系我们删除。

“YOLO语义分割标注文件txt还原到图像中”的评论:

还没有评论