如何在python中检测和旋转图像

如何在python中检测和旋转图像,python,pdf,ocr,python-tesseract,image-preprocessing,Python,Pdf,Ocr,Python Tesseract,Image Preprocessing,我有多个pdf发票,我正试图分析。我将它们转换为图像,并使用ocr从图像中获取文本。其中一个pdf有三分之二的页面旋转90度。我如何检测这些旋转的页面并正确旋转它们以使ocr返回正确的信息?当您说它们是旋转的时,会不会像它们都是纵向的,而有些页面是横向的那样简单?您应该能够从PDF中读取页面方向的元数据,或者如果由于某种原因无法读取,您可能需要使用此简单逻辑来确定它,如rotated=image.width>image.height 使用枕头/PIL,在OCR之前可以轻松旋转图像: if rot

我有多个pdf发票,我正试图分析。我将它们转换为图像,并使用ocr从图像中获取文本。其中一个pdf有三分之二的页面旋转90度。我如何检测这些旋转的页面并正确旋转它们以使ocr返回正确的信息?

当您说它们是旋转的时,会不会像它们都是纵向的,而有些页面是横向的那样简单?您应该能够从PDF中读取页面方向的元数据,或者如果由于某种原因无法读取,您可能需要使用此简单逻辑来确定它,如
rotated=image.width>image.height

使用枕头/PIL,在OCR之前可以轻松旋转图像:

if rotated:
    image = image.rotate(270)

可能会出现页面颠倒的情况,除非您从PDF中获得可靠的元数据,否则您可能必须首先使用最可能的方向(如上所述逆时针90度)进行OCR,如果没有返回任何文本,请在旋转180度后重试。

要保持图像完整,您可以将参数“expand”设置为True

image = image.rotate(270, expand=True)

以下是一个适用于一张图像的解决方案,但您可以对图像列表执行此操作,并在将图像保存回PDF之前检查每个图像:

#import library
enter code here
from PIL import Image
#open image file
f=Image.open('test.jpg')

#conver to pdf
pdf=f.convert('RGB')

#if width > than height, rotate it to get portrait 
if pdf.width > pdf.height:
pdf=pdf.rotate(270,expand=True)

#save pdf
pdf.save('test.pdf')

可以使用imutils进行旋转,而无需在旋转后剪切图像边界

将cv2作为cv导入
导入imutils
img=cv.imread('your_image.png'))
imutils.逆时针旋转(img,270)######270或顺时针旋转90

成功了!谢谢。唯一的问题是旋转后,部分图像被剪切。