【问题标题】:How to detect and rotate images in python如何在python中检测和旋转图像
【发布时间】:2019-06-19 09:15:08
【问题描述】:

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

【问题讨论】:

    标签: python pdf ocr python-tesseract image-preprocessing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这是一个适用于一个图像的解决方案,但您可以对一个图像列表执行此操作,并在将其保存回 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')
      

      【讨论】:

        【解决方案3】:

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

        使用 Pillow/PIL 可以很容易地在 OCR 之前旋转图像:

        if rotated:
            image = image.rotate(270)
        

        可能会出现页面倒置的情况,除非您有可靠的 PDF 元数据,否则您可能必须首先使用最可能的方向进行 OCR(如上文所述逆时针 90 度),如果那样旋转 180 度后不返回任何文本再试一次。

        【讨论】:

        • 成功了!非常感谢。唯一的问题是旋转后,图像的一部分被剪切了。
        【解决方案4】:

        您可以使用 imutils 进行旋转,而不会在旋转后切掉图像边界。

        import cv2 as cv
        import imutils
        img = cv.imread('your_image.png')
        imutils.rotate_bound(img, 270) #### 270 for anti-clockwise or 90 for clockwise
        

        【讨论】:

          猜你喜欢
          • 2014-09-08
          • 2018-03-25
          • 1970-01-01
          • 2014-10-02
          • 1970-01-01
          • 1970-01-01
          • 2011-01-29
          • 2020-05-08
          • 1970-01-01
          相关资源
          最近更新 更多