当前位置:   article > 正文

YOLO图像前处理及格式转换

YOLO图像前处理及格式转换
  1. import cv2
  2. import numpy as np
  3. import os
  4. import glob
  5. # 数据增强函数
  6. def augment_data(img):
  7. rows,cols,_ = img.shape
  8. # 水平翻转图像
  9. if np.random.random() > 0.5:
  10. img = cv2.flip(img, 1)
  11. img_name = os.path.splitext(save_path)[0] + "_flip.png"
  12. cv2.imwrite(img_name, img)
  13. print("Saved augmented image:", img_name)
  14. # 随机缩放图像
  15. scale = np.random.uniform(0.9, 1.1)
  16. M = cv2.getRotationMatrix2D((cols/2, rows/2), 0, scale)
  17. img_transformed = cv2.warpAffine(img, M, (cols, rows))
  18. img_name = os.path.splitext(save_path)[0] + "_transform.png"
  19. cv2.imwrite(img_name, img_transformed)
  20. print("Saved augmented image:", img_name)
  21. # 随机旋转图像
  22. angle = np.random.randint(-10, 10)
  23. M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, 1)
  24. img_rotated = cv2.warpAffine(img, M, (cols, rows))
  25. img_name = os.path.splitext(save_path)[0] + "_rotated.png"
  26. cv2.imwrite(img_name, img_rotated)
  27. print("Saved augmented image:", img_name)
  28. # 添加高斯噪音
  29. mean = 0
  30. std = np.random.uniform(5, 15)
  31. noise = np.zeros(img.shape, np.float32)
  32. cv2.randn(noise, mean, std)
  33. noise = np.uint8(noise)
  34. img_noisy = cv2.add(img, noise)
  35. img_name = os.path.splitext(save_path)[0] + "_noisy.png"
  36. cv2.imwrite(img_name, img_noisy)
  37. print("Saved augmented image:", img_name)
  38. # 随机调整对比度和亮度
  39. alpha = np.random.uniform(0.8, 1.2)
  40. beta = np.random.randint(-10, 10)
  41. img_contrast = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
  42. img_name = os.path.splitext(save_path)[0] + "_contrast.png"
  43. cv2.imwrite(img_name, img_contrast)
  44. print("Saved augmented image:", img_name)
  45. return img
  46. # 读取 data 文件夹中的所有图片,并进行数据增强
  47. data_dir = "data"
  48. save_dir = "result"
  49. if not os.path.exists(save_dir):
  50. os.makedirs(save_dir)
  51. # 使用 glob 库来遍历 data 文件夹中所有图像
  52. for img_path in glob.glob(os.path.join(data_dir, "*.png")):
  53. img = cv2.imread(img_path)
  54. # 获取保存增强后的图片文件名
  55. img_name = os.path.basename(img_path)
  56. save_path = os.path.join(save_dir, img_name)
  57. # 数据增强
  58. augment_data(img)
  59. # 保存原始图片
  60. cv2.imwrite(save_path, img)
  61. print("Saved original image:", save_path)

XML格式数据集转TXT(YOLO)_xml转txt-CSDN博客

yolov8-制作数据集,数据集格式转换(yolo格式-voc格式)附完整代码_yolov8数据集格式-CSDN博客

yolo图像检测数据集格式转换:xml 与 txt格式相互转换_yolo .csv文件转.xml文件-CSDN博客

python 未解析的引用“lxml” - CSDN文库

  1. import os
  2. import xml.etree.ElementTree as ET
  3. # 定义类别列表
  4. classes = ["crack", "porosity", "normal"] # 根据您的数据集进行修改
  5. # 输入和输出文件夹路径
  6. xml_folder = "F:/train/Annotations"
  7. txt_folder = "F:/train/labels"
  8. os.makedirs(txt_folder, exist_ok=True)
  9. # 解析XML文件并转换为YOLO格式
  10. for xml_file in os.listdir(xml_folder):
  11. if xml_file.endswith(".xml"):
  12. # 解析XML
  13. tree = ET.parse(os.path.join(xml_folder, xml_file))
  14. root = tree.getroot()
  15. txt_file_path = os.path.join(txt_folder, os.path.splitext(xml_file)[0] + ".txt")
  16. with open(txt_file_path, "w") as txt_file:
  17. for obj in root.findall("object"):
  18. # 提取类别、边界框信息
  19. class_name = obj.find("name").text
  20. if class_name not in classes:
  21. continue
  22. class_id = classes.index(class_name)
  23. bbox = obj.find("bndbox")
  24. xmin = int(bbox.find("xmin").text)
  25. ymin = int(bbox.find("ymin").text)
  26. xmax = int(bbox.find("xmax").text)
  27. ymax = int(bbox.find("ymax").text)
  28. # 计算边界框中心点和宽高
  29. width = xmax - xmin
  30. height = ymax - ymin
  31. x_center = (xmin + xmax) / 2
  32. y_center = (ymin + ymax) / 2
  33. # 归一化坐标
  34. img_width = int(root.find("size").find("width").text)
  35. img_height = int(root.find("size").find("height").text)
  36. x_center /= img_width
  37. y_center /= img_height
  38. width /= img_width
  39. height /= img_height
  40. # 写入TXT文件
  41. txt_file.write(f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")
  42. print("转换完成!")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/375394
推荐阅读
相关标签
  

闽ICP备14008679号