You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将480x600图像中的矩形ROI转换为多边形ROI

如何将矩形ROI改为多边形ROI?

你当前的矩形ROI通过上下左右四个边界参数定义,要改成多边形ROI,需从参数定义、约束条件、ROI绘制逻辑三个维度调整,具体操作如下:

1. 修改ROI参数定义

矩形的四个边界无法描述多边形形态,需直接定义多边形的顶点坐标列表,每个顶点以(y, x)(对应图像的行、列,符合多数图像处理库的坐标系规则)格式表示,示例代码如下:

import numpy as np

# 定义多边形顶点,按顺时针/逆时针顺序排列以保证闭合
poly_vertices = np.array([
    (150, 180),
    (150, 400),
    (200, 400),
    (200, 250),
    (180, 180)
], dtype=np.int32)

2. 更新约束条件

原矩形的边界大小约束不再适用,需针对多边形特性添加校验逻辑:

# 校验顶点数量:多边形至少需要3个顶点
if len(poly_vertices) < 3:
    raise ValueError("多边形ROI至少需要3个顶点")

# 校验顶点坐标是否在图像范围内(假设cleaned为原始图像)
max_y, max_x = cleaned.shape[:2]
for (y, x) in poly_vertices:
    if y < 0 or y >= max_y or x < 0 or x >= max_x:
        raise ValueError("多边形顶点坐标超出图像范围")

3. 修改ROI图像创建逻辑

原代码仅初始化了空图像,需添加多边形填充逻辑,以下提供两种实现方式:

方式一:使用OpenCV填充

import cv2

# 初始化与原始图像同尺寸、同类型的全黑图像
image = np.zeros(cleaned.shape, dtype=cleaned.dtype)
# 填充多边形区域(彩色图像用(255,255,255),灰度图像用255)
fill_color = (255, 255, 255) if len(cleaned.shape) == 3 else 255
cv2.fillPoly(image, [poly_vertices], color=fill_color)

方式二:使用scikit-image填充

from skimage.draw import polygon

# 初始化空图像
image = np.zeros(cleaned.shape, dtype=cleaned.dtype)
# 拆分顶点的y、x坐标
y_coords, x_coords = zip(*poly_vertices)
# 获取多边形区域的像素索引并填充
rr, cc = polygon(y_coords, x_coords, cleaned.shape)
image[rr, cc] = 255

内容的提问来源于stack exchange,提问作者user20003920

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:50:31