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

基于OpenCV检测指定矩形区域并获取角点坐标的技术求助

问题:栅格图像目标矩形区域的识别优化需求

项目背景

我正在开发一个自动将栅格文件(.tif、.jpg)转换为GeoTIFF的项目,核心需求是识别图像中红色标注的矩形区域。尝试过边缘检测、形态学操作、Canny算子等方法,但在部分栅格文件中无法得到理想结果。所有输入图像为同类型同格式,仅目标矩形区域内的几何对象存在差异。

图像说明

  • 原图:画面包含带侧边数字的目标矩形,矩形内部有不同几何对象
  • 标注示例图:用红色框明确标出了需要识别的目标矩形区域
  • 当前检测结果图:侧边数字干扰了检测逻辑,部分边缘存在变形的矩形完全无法被识别

当前实现代码

import os
import cv2
import numpy as np
from matplotlib import pyplot as plt
import imutils  # 补充原代码遗漏的导入

path = "example/asd.tif"
image = cv2.imread(path)
image_area = image.shape[1] * image.shape[0]
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化处理
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 形态学闭操作
close_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 3))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, close_kernel, iterations=1)
# 膨胀操作
dilate_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))
dilate = cv2.dilate(close, dilate_kernel, iterations=1)

# 轮廓检测与筛选
cnts = cv2.findContours(dilate, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:5]

for c in range(len(cnts)):
    rot_rect = cv2.minAreaRect(cnts[1])
    (x, y), (w, h), angle = rot_rect
    box = cv2.boxPoints(rot_rect)           
    box2 = np.int0(box)
    # 筛选符合宽高比和面积条件的矩形
    if (1.3 > h/w > 1.2) and cv2.contourArea(box2) > image_area * 50 / 100:
        cv2.drawContours(image, [box2], 0, (0, 0, 255), 8)

cv2.imshow("rectangle", image)
cv2.waitKey(0)

当前存在的问题

  • 目标矩形侧边的数字会干扰轮廓检测,导致误判
  • 当目标矩形边缘存在变形时,程序完全无法识别该区域

请求改进建议

希望得到针对性的优化方案,提升目标矩形识别的准确率和鲁棒性,解决上述两个核心问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:03:34