如何使用 Pillow 和 pytesseract 裁剪图像?

How to crop images using Pillow and pytesseract?

我试图使用 pytesseract 来查找图像中每个字母的方框位置。我尝试使用 image, and cropping it with Pillow and it worked, but when I tried with a lower character size image (example), the program may recognize the characters, but cropping the image with the box coordinates give me images like this。我也试过把原图放大一倍,但没有任何改变。

img = Image.open('imgtest.png')
data=pytesseract.image_to_boxes(img)
dati= data.splitlines()
corde=[]
for i in dati[0].split()[1:5]: #just trying with the first character
    corde.append(int(i))
im=img.crop(tuple(corde))
im.save('cimg.png')

如果我们坚持 image_to_boxes 的源代码,我们会看到返回的坐标按以下顺序排列:

left bottom right top

Image.crop 上的文档中我们看到,坐标的预期顺序是:

left upper right lower

现在,pytesseract 似乎也是从下到上迭代图像。因此,我们还需要进一步转换top/upperbottom/lower坐标

那是修改后的代码:

from PIL import Image
import pytesseract

img = Image.open('MJwQi9f.png')
data = pytesseract.image_to_boxes(img)
dati = data.splitlines()
corde = []
for i in dati[0].split()[1:5]:
    corde.append(int(i))
corde = tuple([corde[0], img.size[1]-corde[3], corde[2], img.size[1]-corde[1]])
im = img.crop(tuple(corde))
im.save('cimg.png')

你看,leftright在同一个地方,但是top/upperbottom/lower调换了places,where 也改变了 w.r.t。图片高度。

而且,这是更新后的输出:

结果不是最佳的,但我认为这是字体的原因。

----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.16299-SP0
Python:        3.9.1
Pillow:        8.1.0
pytesseract:   4.00.00alpha
----------------------------------------