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

Python图像识别生成四边形外接框 规避拟合目标内部轮廓问题

解决方案

要实现生成轮廓对应的块外接四边形框,只需替换原代码中轮廓多边形拟合的逻辑,直接计算轮廓的外接矩形即可,修改思路和代码如下:

核心修改说明

  • 原代码中cv2.approxPolyDP的作用是对轮廓做多边形逼近,会贴合轮廓的细节边缘,这是导致框线贴合内部轮廓的原因
  • 替换为cv2.boundingRect可直接得到轮廓的轴对齐外接矩形,若需要适配倾斜块的最小旋转外接矩形,可以用cv2.minAreaRect实现

修改后代码

import cv2
import numpy as np

# 读取图像
img = cv2.imread("map3.png")

imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(imgray, 110, 255, 
                            cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    area = cv2.contourArea(contour)
    if area > 500:
        # 方式1:计算轴对齐外接矩形,返回值为 (左上角x, 左上角y, 宽度w, 高度h)
        x, y, w, h = cv2.boundingRect(contour)
        # 绘制矩形框
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
        
        # 方式2:如果需要倾斜的最小外接四边形,注释掉方式1,启用以下代码即可
        # rect = cv2.minAreaRect(contour)
        # box = cv2.boxPoints(rect)
        # box = np.int0(box)
        # cv2.drawContours(img, [box], 0, (0, 0, 255), 2)


cv2.imshow("IMAGE", img)
cv2.waitKey(0)

参数调整提示

如果出现框选范围不符合预期的情况,可以调整两个阈值参数:

  • 阈值分割的110参数,适配不同亮度的图像分割效果
  • 面积过滤的500参数,过滤掉不需要的小噪点轮廓

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:18:02