使用Python如何移除OpenCV检测到的矩形框包围的图像文本
移除矩形框包围文本的实现方法
你已经完成了文本区域的轮廓检测与矩形框筛选,接下来可以通过图像修复(Inpainting) 算法填充文本区域的像素,实现文本移除,完整操作步骤如下:
- 第一步:生成和原图尺寸一致的掩码图,将所有检测到的文本矩形区域标记为白色(值255),其余区域为黑色(值0)
- 第二步:调用OpenCV内置的图像修复接口,基于掩码区域周围的像素信息填充文本区域
- 第三步:输出修复完成的无文本图像
完整实现代码
import numpy as np import cv2 # --- 以下是文本区域检测原有代码(已修正缩进错误、优化执行逻辑) --- region = [] contours, hierarchy = cv2.findContours(dilation2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for i in range(len(contours)): cnt = contours[i] # 计算轮廓面积,过滤小面积噪点 area = cv2.contourArea(cnt) if area < 80: continue # 求最小外接矩形 rect = cv2.minAreaRect(cnt) # 获取矩形四个顶点坐标 box = cv2.boxPoints(rect) box = np.int0(box) # 计算矩形高宽 height = abs(box[0][1] - box[2][1]) width = abs(box[0][0] - box[2][0]) # 根据文本特征过滤过高的窄矩形,保留扁平文本区域 if height > width * 3: continue region.append(box) # 绘制检测到的文本框(原代码此处缩进错误,放在了轮廓遍历循环内,会重复执行多次) for box in region: cv2.drawContours(img, [box], 0, (0, 255, 0), 1) cv2.imshow('文本区域检测结果', img) # --- 新增文本移除逻辑 --- # 1. 生成全黑掩码图 mask = np.zeros(img.shape[:2], dtype=np.uint8) # 2. 将所有文本矩形区域在掩码上填充为白色 for box in region: cv2.drawContours(mask, [box], 0, 255, -1) # 参数-1表示填充整个矩形内部 # 3. 执行图像修复 # 可选修复算法: # cv2.INPAINT_TELEA:运算速度快,适合小面积普通文本 # cv2.INPAINT_NS:修复效果更平滑,适合大面积或背景复杂的文本区域 # 第三个参数为修复半径,单位为像素,可根据文本粗细调整 inpainted_img = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA) # 展示和保存结果 cv2.imshow('移除文本后的图像', inpainted_img) cv2.waitKey(0) cv2.destroyAllWindows() # 若需要保存结果可取消下方注释 # cv2.imwrite('inpainted_result.png', inpainted_img)
注意:如果文本区域周边背景纹理复杂,修复后存在明显拼接痕迹,可以适当调大修复半径参数,或更换为INPAINT_NS算法获得更好的背景融合效果。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

