使用 opencv、tesseract 在 python 中遇到数字识别问题

Having problem with digits recognition in python using opencv, tesseract

我正在尝试使用 opencv 裁剪图像,然后让 tesseract 读取它,但即使图像非常清晰,它也无法识别图像中的数字,以下是操作的代码行:

screen_img = cv2.imread(f'data\screenshot\{e_name}.png')
crop_img = screen_img[350:385,185:270]
crop_img = cv2.cvtColor(crop_img,cv2.COLOR_BGR2GRAY)
cv2.imwrite(f'data\screenshot{e_name}.png',crop_img)
cv2.imshow('ad',crop_img)
cv2.waitKey(0)
text = pytesseract.image_to_string(crop_img)
print(text)

cv2.imshow('ad',crop_img) 的输出看起来像这样:

但是 print(text) 的输出只是控制台中的一个新的空白行。

非常感谢您的帮助(由于我不是专业程序员,我可能会犯一些愚蠢的错误,对此我深表歉意)。

EDIT1:感谢评论,我添加了几行:

screen_img = cv2.imread(f'data\screenshot\{e_name}.png')
crop_img = screen_img[350:385,185:270]
crop_img = cv2.cvtColor(crop_img,cv2.COLOR_BGR2GRAY)
crop_img = cv2.bitwise_not(crop_img)
ret, thresh1 = cv2.threshold(crop_img, 120, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('ad',thresh1)
cv2.waitKey(0)
text = pytesseract.image_to_string(thresh1)

输出现在看起来更有希望了:

但结果似乎保持不变,我从互联网上检查了一些随机文本图像,大多数都工作正常。

添加 config='--psm 6'.

时会发生神奇的事情

根据Tesseract OCR options page

6 Assume a single uniform block of text.


代码示例:

crop_img = cv2.imread('crop_img.png')
text = pytesseract.image_to_string(crop_img, config='--psm 6')
print(text)

结果:
73.9