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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:57:04