基于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
相关产品推荐
相关产品推荐

