Eric12219180 2023-02-19 14:58 采纳率: 62.2%
浏览 16

医疗影像训练yolo的bouding box标注档自动生成

如下圖, 我有train檔案和其ROI的標註圖像。

img

img

好现在我有了ROI版本的label对吧?
那我接下来会有两个动作:
1.用openCV划出框住白色圈圈的bounding box, 并回传其坐标。
**2.将那些坐标变成“yolo 标注格式”, 并且每一张ROI's bounding box label对应一个txt文件输出到另一个空文件夹。 **

请给我一个 function code去执行这两个步骤, 感谢。

  • 写回答

1条回答 默认 最新

  • 不咕鸟会咕咕 2023-02-19 23:40
    关注

    下面是一个Python函数的示例代码,可以实现你所需的两个步骤:

    import cv2
    import os
    
    def process_images(input_folder, output_folder):
        # 读取训练图像和其ROI的标注图像
        train_img = cv2.imread(os.path.join(input_folder, "train.png"))
        roi_img = cv2.imread(os.path.join(input_folder, "roi.png"), cv2.IMREAD_GRAYSCALE)
    
        # 使用OpenCV找到ROI的轮廓,并划出包围它们的矩形框
        contours, _ = cv2.findContours(roi_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        bounding_boxes = []
        for contour in contours:
            x, y, w, h = cv2.boundingRect(contour)
            bounding_boxes.append((x, y, w, h))
            cv2.rectangle(train_img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
        # 将bounding boxes的坐标转换成YOLO格式,并保存到txt文件中
        img_h, img_w, _ = train_img.shape
        for i, bbox in enumerate(bounding_boxes):
            x, y, w, h = bbox
            x_center = (x + w / 2) / img_w
            y_center = (y + h / 2) / img_h
            width = w / img_w
            height = h / img_h
            with open(os.path.join(output_folder, f"label_{i}.txt"), "w") as f:
                f.write(f"0 {x_center} {y_center} {width} {height}")
    
        # 保存带有bounding boxes的训练图像
        cv2.imwrite(os.path.join(output_folder, "train_bbox.png"), train_img)
    

    函数的输入是包含训练图像和ROI标注图像的文件夹路径,和用于保存输出文件的文件夹路径。输出是一个包含YOLO格式标注文件和带有bounding boxes的训练图像的文件夹。

    请注意,此示例代码假定只有一个对象需要标注。如果有多个对象,则需要对每个对象重复执行这个过程,并使用不同的标签(例如0, 1, 2等)来标识它们。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月19日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数