如图:
有training images:
和與之對應的ROI label:
问题:
我要如何写一个 python function去得到yolo format的bounding box 标注讯息? (bounding box是包住白点ROI的)
并所有都变成txt文件, 存在一个空文件夹里。
如图:
有training images:
和與之對應的ROI label:
问题:
我要如何写一个 python function去得到yolo format的bounding box 标注讯息? (bounding box是包住白点ROI的)
并所有都变成txt文件, 存在一个空文件夹里。
要得到YOLO格式的bounding box标注信息,你需要进行以下步骤:
加载图像并使用某种算法(如Canny边缘检测、阈值分割等)找到感兴趣区域(ROI)的位置。
对于每个ROI,计算它的中心坐标、宽度和高度。
将这些信息转换为YOLO格式的bounding box标注信息,并将它们保存到一个txt文件中。
下面是一个实现上述功能的Python函数示例:
import cv2
import os
def get_yolo_bbox(image_path, output_dir):
# 加载图像
img = cv2.imread(image_path)
# 对图像进行预处理,找到感兴趣区域(ROI)的位置
# 这里用Canny边缘检测作为示例
edges = cv2.Canny(img, 100, 200)
# 找到ROI的位置
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rois = [cv2.boundingRect(c) for c in contours]
# 转换为YOLO格式的bounding box标注信息,并保存到txt文件中
img_height, img_width, _ = img.shape
with open(os.path.join(output_dir, os.path.splitext(os.path.basename(image_path))[0] + '.txt'), 'w') as f:
for roi in rois:
x_center = (roi[0] + roi[2] / 2) / img_width
y_center = (roi[1] + roi[3] / 2) / img_height
w = roi[2] / img_width
h = roi[3] / img_height
f.write(f'0 {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}\n')
这个函数接受一个图像文件路径和一个输出目录作为输入参数,会将YOLO格式的bounding box标注信息保存到一个txt文件中,文件名与图像文件名相同,存储在指定的输出目录下。函数使用Canny边缘检测算法作为示例找到ROI的位置,你可以根据自己的需求使用不同的算法进行ROI的检测。
使用该函数的示例代码如下:
import os
input_dir = 'path/to/input/dir'
output_dir = 'path/to/output/dir'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 对于输入目录中的每个图像文件,生成YOLO格式的bounding box标注信息并保存到txt文件中
for filename in os.listdir(input_dir):
if filename.endswith('.jpg'):
image_path = os.path.join(input_dir, filename)
get_yolo_bbox(image_path, output_dir)
这个示例代码遍历输入目录中的每个图像文件,调用get_yolo_bbox()函数生成bounding box标注信息并将其保存到txt文件中,这些txt文件会存储到指定的输出目录下。
如果对您有帮助,请给与采纳,谢谢。