如何用OpenCV或Pillow优化小图像以提升Tesseract数据提取效果
图像优化适配Tesseract的方案
针对你提供的表格类图像,可通过以下针对性处理步骤提升Tesseract的文字识别精度:
1. 消除背景阴影干扰
这类图像存在明显的背景阴影,直接灰度化无法有效区分文字与背景,可通过背景减法消除阴影:
import cv2 import numpy as np # 读取图像并转为灰度图 img = cv2.imread("目标图像路径.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 生成背景掩码(通过形态学膨胀获取大面积背景) kernel = np.ones((25, 25), np.uint8) background = cv2.morphologyEx(gray, cv2.MORPH_DILATE, kernel) # 背景减法提取清晰前景文字 no_shadow = cv2.divide(gray, background, scale=255)
2. 去除表格线条干扰
表格的横竖线条会干扰Tesseract识别,可通过形态学开操作精准去除细线条:
# 创建水平、垂直结构元素 horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40, 1)) vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 40)) # 去除水平线条 temp = cv2.erode(no_shadow, horizontal_kernel, iterations=1) no_horizontal = cv2.dilate(temp, horizontal_kernel, iterations=1) # 去除垂直线条 temp = cv2.erode(no_horizontal, vertical_kernel, iterations=1) no_lines = cv2.dilate(temp, vertical_kernel, iterations=1)
3. 自适应阈值二值化
使用自适应阈值替代固定阈值,更适配光照不均的图像:
# 自适应高斯阈值二值化,反转黑白让文字为白色 thresh = cv2.adaptiveThreshold(no_lines, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
4. 去除残留噪点(可选)
如果图像仍有细碎噪点,用中值滤波清理:
cleaned_img = cv2.medianBlur(thresh, 3)
5. Tesseract识别参数优化
除图像预处理外,给Tesseract指定适合表格的识别模式:
import pytesseract # --psm 6:假设图像为单块统一格式文本;--psm 4:适合列对齐的表格文本 result = pytesseract.image_to_string(cleaned_img, config='--psm 6') print(result)
内容的提问来源于stack exchange,提问作者ZKS
相关产品推荐
相关产品推荐

