如何用OpenCV涂黑图像指定区域 避免Tesseract识别该区域文本
图像文本提取指定区域屏蔽实现方案
可行性结论
该需求可完全实现,核心思路是定位所有不需要识别的区域,将对应位置像素填充为纯黑色后再送入Tesseract识别,被涂黑区域不会输出任何文本识别结果。
参考素材:
- 原始待识别图像:
- 标注了屏蔽区域的参考图(红色块为待屏蔽位置):
实现逻辑
- 读取待识别原图、带红色屏蔽标注的参考图,两张图尺寸需保持一致
- 对标注图做颜色空间转换,提取所有红色标注区域生成二值屏蔽mask
- 基于mask将原图中对应位置的像素全部置为
(0,0,0)(纯黑色) - 处理完成的图像直接送入Tesseract执行文本提取即可
完整实现代码
import cv2 import numpy as np import pytesseract # 读取本地文件 origin_img = cv2.imread('test.jpeg') # 替换为你的原图本地路径 mark_img = cv2.imread('mark.jpeg') # 替换为你的红色标注图本地路径 # 提取红色标注区域生成屏蔽mask hsv = cv2.cvtColor(mark_img, cv2.COLOR_BGR2HSV) # 红色在HSV空间分两个区间,覆盖标注用的亮红色 lower_red_1 = np.array([0, 120, 70]) upper_red_1 = np.array([10, 255, 255]) lower_red_2 = np.array([170, 120, 70]) upper_red_2 = np.array([180, 255, 255]) mask_part1 = cv2.inRange(hsv, lower_red_1, upper_red_1) mask_part2 = cv2.inRange(hsv, lower_red_2, upper_red_2) block_mask = mask_part1 + mask_part2 # 将mask对应区域涂黑 origin_img[block_mask > 0] = [0, 0, 0] # 可选:预览处理效果 cv2.imshow('preprocess_result', origin_img) cv2.waitKey(0) cv2.destroyAllWindows() # 送入Tesseract执行文本识别 recognize_result = pytesseract.image_to_string(origin_img, lang='chi_sim+eng') print(recognize_result)
补充说明
- 如果屏蔽区域是固定位置,不需要每次用标注图生成mask,可以直接提前记录区域坐标,用
cv2.rectangle(origin_img, 左上角坐标, 右下角坐标, (0,0,0), -1)直接涂黑固定区域,运行效率更高 - 如果后续更换标注颜色,只需要调整HSV的上下阈值,适配对应标注色即可
- 涂黑操作必须在送入Tesseract之前执行,否则屏蔽区域的文本仍会被检测到
内容的提问来源于stack exchange,提问作者ArseneCC
相关产品推荐
相关产品推荐



