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

无法从图像提取完整文本:Canny后OCR识别不全的解决咨询

OCR文本提取优化建议

一、不建议改用Sobel算子

Sobel和Canny同属边缘检测算法,输出的都是字符的轮廓线条,丢失了字符的实心填充区域。Tesseract对完整实心字符区域的识别准确率远高于边缘线条,换用Sobel无法解决当前的识别问题,反而可能因为边缘信息更杂乱降低效果。

二、优化预处理流程

放弃边缘检测,改用灰度图+自适应阈值+形态学处理的组合,保留完整字符区域:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 读取图像并转灰度
book = cv2.imread("Book.jpg")
gray = cv2.cvtColor(book, cv2.COLOR_BGR2GRAY)

# 自适应阈值处理(解决光照不均问题,生成实心字符)
thresh = cv2.adaptiveThreshold(
    gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
    cv2.THRESH_BINARY_INV, 11, 2
)

# 形态学闭运算,修复字符断裂
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
processed_img = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# 可选:显示处理后的图像
cv2.imshow("Processed", processed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、调整Tesseract识别参数

给Tesseract指定页面分割模式(PSM),让它更准确识别文本块:

# 写入识别结果
with open("recognized.txt", "a", encoding="utf-8") as file:
    # --psm 6:假设输入是单一均匀文本块
    text = pytesseract.image_to_string(processed_img, config='--psm 6')
    file.write(text)
    file.write("\n")

额外建议

  • 如果图像存在倾斜,先添加倾斜校正:用cv2.HoughLinesP检测文本行角度,再旋转图像修正。
  • 尝试调整自适应阈值的blockSize(必须为奇数)和C值,找到最适配当前图像的参数。

内容的提问来源于stack exchange,提问作者neural science

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:54:54