Eric12219180 2023-02-19 15:08 采纳率: 62.2%
浏览 55
已结题

医疗影像ROI生成bounding box并输出成yolo格式的annotation text file

如图:

有training images:

img

和與之對應的ROI label:

img

问题:
我要如何写一个 python function去得到yolo format的bounding box 标注讯息? (bounding box是包住白点ROI的)
并所有都变成txt文件, 存在一个空文件夹里。

  • 写回答

7条回答 默认 最新

  • 「已注销」 2023-02-19 15:37
    关注

    要得到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文件会存储到指定的输出目录下。
    如果对您有帮助,请给与采纳,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 2月19日

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?