无法从图像提取完整文本: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
相关产品推荐
相关产品推荐

