如何用纯色覆盖图片文字(替代cv2.inpaint背景修复方案)
用纯色覆盖识别出的文字(替代背景生成)
原代码使用cv2.inpaint生成背景来去除文字,现在改为直接用纯色填充文字所在的包围框区域,核心修改是移除背景修复逻辑,改为在图像副本上填充指定颜色的多边形区域,实现更直接的文字遮盖效果。
修改后的完整代码
import matplotlib.pyplot as plt import keras_ocr import cv2 import numpy as np def cover_text_with_solid_color(img_path, pipeline, color=(255, 255, 255)): # 读取图像(keras_ocr返回RGB格式) img = keras_ocr.tools.read(img_path) # 创建图像副本,避免修改原始图像 result_img = img.copy() # 识别图像中的文字及对应包围框 prediction_groups = pipeline.recognize([img]) for box in prediction_groups[0]: # 提取文字包围框的四个顶点坐标并转换格式 points = np.array(box[1], dtype=np.int32) # 用指定纯色填充文字包围框区域 cv2.fillPoly(result_img, [points], color) return result_img # 初始化keras_ocr识别管道 pipeline = keras_ocr.pipeline.Pipeline() # 处理图像(默认用白色覆盖文字,可自定义color参数,比如黑色(0,0,0)、灰色(128,128,128)) img_text_covered = cover_text_with_solid_color('image.png', pipeline) # 展示处理结果 plt.imshow(img_text_covered) plt.show() # 保存结果(转换为cv2兼容的BGR格式) cv2.imwrite('result.png', cv2.cvtColor(img_text_covered, cv2.COLOR_RGB2BGR))
关键修改说明
- 移除背景修复逻辑:删掉原代码中
mask生成和cv2.inpaint相关代码,直接对文字区域进行纯色填充 - 新增自定义颜色参数:函数支持传入
color参数,默认白色,可根据需求设置任意RGB颜色值 - 图像格式兼容处理:保留keras_ocr的RGB读取格式,保存时转换为cv2要求的BGR格式
- 保护原始图像:基于原图副本进行操作,避免破坏原始图像数据
内容的提问来源于stack exchange,提问作者dexter00x
相关产品推荐
相关产品推荐

