如何通过图像预处理优化模糊图像的EasyOCR文本识别结果
优化模糊图像的EasyOCR文本识别方案
针对模糊图像导致EasyOCR识别不准确的问题,可通过以下图像预处理方法和参数调整来提升识别精度:
一、核心图像预处理方法
1. 锐化增强文本边缘
通过拉普拉斯算子强化字符边缘,让模糊的文本轮廓更清晰:
def sharpen_image(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) laplacian = cv2.Laplacian(gray, cv2.CV_64F) sharpened = gray - 0.3 * laplacian # 确保像素值在0-255范围内 sharpened = np.uint8(np.clip(sharpened, 0, 255)) return sharpened
2. 自适应阈值二值化
针对模糊图像的光照不均问题,自适应阈值能精准分离文本与背景:
def adaptive_threshold(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) return thresh
3. 非局部均值去噪
去除模糊带来的噪声干扰,同时保留文本细节:
def denoise_image(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) denoised = cv2.fastNlMeansDenoising(gray, h=10) return denoised
二、整合后的完整运行代码
将预处理步骤串联,并修正原代码中未定义stretch的错误:
import cv2 import numpy as np import easyocr # 初始化EasyOCR阅读器(支持英文、韩文) reader = easyocr.Reader(['en','ko']) # 组合预处理流程 def preprocess_image(img): # 转为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 去噪 denoised = cv2.fastNlMeansDenoising(gray, h=10) # 锐化 laplacian = cv2.Laplacian(denoised, cv2.CV_64F) sharpened = denoised - 0.3 * laplacian sharpened = np.uint8(np.clip(sharpened, 0, 255)) # 自适应二值化 thresh = cv2.adaptiveThreshold(sharpened, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) return thresh # 读取输入图像 img = cv2.imread('/content/image (2).png') # 执行预处理 processed_img = preprocess_image(img) # 文本识别 response = reader.readtext(processed_img) # 提取并拼接识别结果 text = " ".join([r[1] for r in response]) print(text)
三、额外优化技巧
- 调整EasyOCR识别参数:在
readtext中加入contrast_ths=0.3(过滤低对比度区域)、adjust_contrast=0.5(自动调整对比度)等参数,进一步适配模糊图像。 - 图像放大:若原图像分辨率偏低,可先用
cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)放大图像,再执行预处理和识别。 - 尝试预处理组合:根据实际图像效果调整预处理顺序,比如先锐化再去噪,或替换为双边滤波
cv2.bilateralFilter实现更柔和的去噪效果。
内容的提问来源于stack exchange,提问作者Hamad Younis
相关产品推荐
相关产品推荐

