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

基于OpenCV与Pytesseract的图像文字识别优化:如何修正字符'5'被误识别为'S'的问题

基于OpenCV与Pytesseract的图像文字识别优化:如何修正字符'5'被误识别为'S'的问题

大家好,我最近在做图像文字识别的时候遇到了一个小麻烦,想请大家帮忙看看怎么优化。

首先,先把需要处理的图片下载下来,保存为sample.png:
待识别的图片

我的目标是提取这张图里的英文字符和数字,最开始我写了这样一段代码:

import cv2
import pytesseract

img = cv2.imread("sample.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY_INV, 23, 100)
bnt = cv2.bitwise_not(thr)
txt = pytesseract.image_to_string(bnt, config="--psm 6")
res = ''.join(i for i in txt if i.isalnum())
print(res)

结果输出却只有:

ee

之后我调整了预处理的步骤,又试了一次:

import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'/bin/tesseract'
image = cv2.imread('sample.png')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
inverted_image = cv2.bitwise_not(gray_image)
binary_image = cv2.adaptiveThreshold(inverted_image, 255, 
                                     cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                     cv2.THRESH_BINARY, 11, 2)
denoised_image = cv2.medianBlur(binary_image, 3)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4, 4))
eroded_image = cv2.erode(denoised_image, kernel)
mask = (denoised_image == 255) & (eroded_image == 0)
denoised_image[mask] = 0
cv2.imwrite('preprocessed_image.png', denoised_image)
text = pytesseract.image_to_string(denoised_image, config='--psm 6')
print("result:", text.strip())

这次的结果比第一次好多了:

result:CRSP

但问题来了,实际图片里的字符应该是CR5P,也就是数字5被误识别成了字母S,这可怎么办呢?有没有办法优化代码,让识别更准确?

另外,我再放一张更清晰的细节图,方便大家看清楚那个数字5的样子:
字符细节图

备注:内容来源于stack exchange,提问作者showkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:29:28