如何导出Yolo v7模型生成的心脏掩码的多边形坐标?
YOLOv7-seg导出掩码多边形坐标的实现方法
定位掩码处理逻辑:在YOLOv7-seg的推理脚本(如
segment/predict.py)中,模型推理后会输出包含掩码的结果,找到masks变量(模型输出的掩码张量)。转换掩码格式:将GPU上的掩码张量转为CPU端的numpy二值数组:
masks_np = masks.cpu().numpy().astype(np.uint8)
这里masks_np的形状为(n, h, w),n是检测到的目标数量,h、w是掩码的高度和宽度。
- 提取多边形轮廓:用OpenCV的轮廓检测函数提取每个掩码的多边形坐标,示例代码如下:
import cv2 import numpy as np polygons = [] for mask in masks_np: # 提取最外层轮廓,过滤内部小轮廓 contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if contours: # 取面积最大的轮廓(避免噪点干扰) largest_contour = max(contours, key=cv2.contourArea) # 转换为(x,y)坐标列表 poly_coords = largest_contour.reshape(-1, 2).tolist() polygons.append(poly_coords)
- 适配原图尺寸:如果模型输出的掩码尺寸小于原图,需要先将掩码缩放至原图尺寸再提取轮廓,示例:
# 假设原图尺寸为(img_h, img_w) mask_resized = cv2.resize(mask, (img_w, img_h), interpolation=cv2.INTER_NEAREST)
- 保存结果:将提取到的多边形坐标和对应的边界框、类别ID等信息一起保存(比如写入JSON文件),方便后续使用。
内容的提问来源于stack exchange,提问作者Alexander Rausch
相关产品推荐
相关产品推荐

