如何使用 pytesseract 从图像的一部分读取文本

How to read text from only a portion of the image with pytesseract

我正在尝试从这张图片中读取 213,但我什至无法让 pytesseract 读取所有内容 这是我尽力而为的代码:

import cv2
import pytesseract

img = cv2.imread('gamepictures/text.png')  # Load the image
img = cv2.cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # convert to grey
img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, 15)
txt = pytesseract.image_to_string(img, config='--psm 6')
print(txt)
cv2.imshow("", img)
cv2.waitKey(0)

我一直在尝试更改 treshholding 算法,我什至尝试过使用 canny,但我无法让它工作。 所以我的问题是我怎样才能阅读所有内容?

而且我怎么只能读213

image

像这样的东西有效:

import cv2
import pytesseract

img = cv2.imread('gamepictures/text.png')  # Load the image
img = img[98:190,6:149,:]
img = cv2.cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # convert to grey
img = cv2.GaussianBlur(img, (5, 5), 3)
img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 7, -2)

txt = pytesseract.image_to_string(img, config='--psm 10 -c tessedit_char_whitelist=0123456789')
print(img.shape)
print(txt)
cv2.imshow("", img)
cv2.waitKey(0)

基本上我只是将图像切片并稍微调整一下参数。 GaussianBlur 是为了使图像更连续。

-c tessedit_char_whitelist=0123456789 是可选的,只是确保只读取数字。