如何使用 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
/upper
和bottom
/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')
你看,left
和right
在同一个地方,但是top
/upper
和bottom
/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
----------------------------------------
我试图使用 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
/upper
和bottom
/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')
你看,left
和right
在同一个地方,但是top
/upper
和bottom
/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
----------------------------------------