如何检测图像中的简单矩形并保存后替换为描述文本?
解决方案:矩形检测、提取与文本替换实现
以下是基于Python+OpenCV的完整实现方案,可直接处理你的需求:
步骤说明
- 图像预处理:将原图转为灰度图,通过边缘检测和形态学操作突出矩形轮廓
- 矩形轮廓筛选:提取图像轮廓,筛选出符合矩形特征的轮廓(4条边、凸多边形)
- 矩形提取保存:截取每个矩形的ROI区域,保存为单独图片文件
- 文本替换:在原图的矩形位置填充背景色,添加自定义描述文本
完整代码
import cv2 import numpy as np # 读取原图(替换为你的输入图像路径) img = cv2.imread("HNQwm.jpg") # 创建副本用于绘制结果 result_img = img.copy() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 预处理:边缘检测+形态学闭运算增强轮廓 edges = cv2.Canny(gray, 50, 150) kernel = np.ones((3,3), np.uint8) edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) # 提取轮廓 contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) rect_count = 0 for cnt in contours: # 计算轮廓近似多边形 epsilon = 0.02 * cv2.arcLength(cnt, True) approx = cv2.approxPolyDP(cnt, epsilon, True) # 筛选矩形:4条边+凸多边形+面积过滤(排除小噪点) if len(approx) == 4 and cv2.isContourConvex(approx) and cv2.contourArea(cnt) > 1000: rect_count += 1 # 获取矩形边界框 x, y, w, h = cv2.boundingRect(approx) # 提取ROI并保存 roi = img[y:y+h, x:x+w] cv2.imwrite(f"矩形_{rect_count}.jpg", roi) # 替换为文本:先填充白色背景 cv2.rectangle(result_img, (x, y), (x+w, y+h), (255,255,255), -1) # 添加描述文本(可自定义内容) text = f"矩形{rect_count}" # 计算文本位置(居中) text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2)[0] text_x = x + (w - text_size[0]) // 2 text_y = y + (h + text_size[1]) // 2 cv2.putText(result_img, text, (text_x, text_y), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,0), 2) # 保存替换后的结果图 cv2.imwrite("替换后原图.jpg", result_img) # 可选:显示结果 cv2.imshow("Result", result_img) cv2.waitKey(0) cv2.destroyAllWindows()
关键细节说明
- 轮廓筛选条件:通过
approxPolyDP获取近似多边形,仅保留4边的凸轮廓,同时过滤面积过小的噪点 - ROI提取:利用
boundingRect获取矩形坐标,直接截取对应区域保存 - 文本居中:通过
getTextSize计算文本尺寸,确保文本在矩形区域内居中显示 - 自定义调整:可修改文本内容、字体大小、背景色等参数适配你的需求
内容的提问来源于stack exchange,提问作者moshtaba
相关产品推荐
相关产品推荐

