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

如何在Python中为粗糙掩码拟合无旋转矩形?

在Python中为粗糙掩码拟合无旋转矩形的方法

对于无旋转的矩形拟合,本质是找到掩码区域的轴对齐最小外接矩形,通过提取掩码中非零像素的坐标边界就能实现,用OpenCV结合Numpy可快速完成。

实现步骤

  1. 加载掩码图像并转为二值格式(确保掩码区域为非零值,背景为0)
  2. 提取掩码中所有非零像素的x、y坐标
  3. 计算x坐标的最小/最大值,y坐标的最小/最大值,以此确定矩形边界
  4. 根据边界绘制或输出矩形参数

代码示例

import cv2
import numpy as np

# 加载掩码图像(假设输入为单通道灰度图,掩码区域为白色)
mask = cv2.imread("mask_input.png", cv2.IMREAD_GRAYSCALE)

# 获取所有非零像素的坐标
y_coords, x_coords = np.where(mask > 0)

# 计算矩形边界
x_min, x_max = x_coords.min(), x_coords.max()
y_min, y_max = y_coords.min(), y_coords.max()

# 计算矩形的左上角坐标和宽高
rect_top_left = (x_min, y_min)
rect_width = x_max - x_min
rect_height = y_max - y_min

# 绘制矩形到图像上(可选)
output_img = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
cv2.rectangle(output_img, rect_top_left, (x_max, y_max), (0, 255, 0), 2)

# 保存或显示结果
cv2.imwrite("rectangle_output.png", output_img)
cv2.imshow("Result", output_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

补充说明

  • 如果掩码是彩色图,需先转为灰度图并通过cv2.threshold做二值化处理,确保只有目标区域为非零值
  • 该方法基于像素坐标极值计算,完全匹配无旋转矩形的拟合需求,计算高效且精度足够

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:50:14