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

使用OpenCV去除图像蓝色噪声 优化pytesseract OCR识别效果

问题描述

有两张带有蓝色噪声的图像,需要去除噪声后使用pytesseract将图像转换为文本。尝试提取蓝色通道进行处理的方法后,效果仍不理想。

现有实现代码

import cv2
import pytesseract

# 提取蓝色通道
blue = img[:, :, 0]

# 对蓝色通道应用阈值处理
thresh = cv2.threshold(blue, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]

# 执行形态学操作去除噪声
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,1))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=7)

# 应用模糊平滑图像(当前未启用模糊)
blur = opening#cv2.medianBlur(opening, 1)

cv2.imwrite("/Users/arjunmalik/Desktop/blur.png",blur)
display("/Users/arjunmalik/Desktop/blur.png")

当前处理结果

  • 处理后的图像仍存在明显噪声干扰
  • pytesseract识别结果为:FL1S4y
优化解决方案

针对蓝色噪声的去除,推荐以下几种实用调整思路:

1. 切换到HSV色彩空间精准过滤蓝色噪声

蓝色在HSV色彩空间有明确的取值范围,可以针对性提取并消除蓝色区域:

import cv2
import pytesseract

# 读取目标图像
img = cv2.imread("你的图像路径.png")
# 转换为HSV色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义蓝色的HSV范围(可根据实际图像微调数值)
lower_blue = (90, 50, 50)
upper_blue = (130, 255, 255)
# 创建蓝色区域的掩码
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 去除图像中的蓝色区域(将蓝色部分替换为白色)
result = cv2.bitwise_and(img, img, mask=~mask)
result[mask != 0] = (255, 255, 255)

# 转换为灰度图并执行阈值处理
gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]

# 优化形态学操作(调整核大小与迭代次数,避免破坏字符结构)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)

# 执行OCR识别
text = pytesseract.image_to_string(opening, config="--psm 8")
print("识别结果:", text.strip())

2. 调整原有蓝色通道处理的参数

  • 增大形态学操作的核尺寸:将(1,1)改为(2,2),同时减少迭代次数(原7次过多,会破坏字符边缘)
  • 启用中值模糊:取消注释blur = cv2.medianBlur(opening, 3),用3x3的核平滑残留噪声
  • 尝试自适应阈值:替换全局阈值为cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2),适配局部光照差异

3. 给OCR添加针对性配置参数

调用pytesseract时,指定识别模式和字符白名单,减少识别错误:

text = pytesseract.image_to_string(processed_img, config="--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

其中--psm 8表示按单个字符识别(适用于验证码类图像),tessedit_char_whitelist限定识别的字符范围,过滤无关字符干扰。

内容的提问来源于stack exchange,提问作者Arjun Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:10:19