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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:48:11