有没有一种方法可以使文档图像从任何位置垂直放置?

问题描述 投票:1回答:2

我有这样的文件:

在某些情况下,图像向右旋转,甚至上下旋转。

文档示例向右旋转:

文档示例上下颠倒旋转:

不管起始位置是什么,都可以使图像垂直吗?

预期结果:

python python-3.x image opencv image-processing
2个回答
2
投票

我认为您对EXIF的存储方向的能力感到犯规,有些观众会忽略。最简单的方法是使用ImageMagick,它包含在大多数Linux发行版中,并且可用于macOS和Windows。在终端或Windows中的命令提示符中使用此命令将首先更正方向,然后删除此设置,以免使观看者感到困惑:

magick input.jpg -auto-orient -strip result.jpg

如果使用v6 ImageMagick,则将magick替换为convert


0
投票

处理示例中所示的典型(矩形)paper sizes和从左至右的定向文本,可以做出以下两个假设:

  • 纸张高度必须始终大于纸张宽度。这很容易检查。如果需要,旋转90度。
  • 将在左侧多于右侧找到更多文本。因此,对所有行的像素值求和。文档左侧区域中的总和必须大于右侧区域中的总和。如果需要,旋转180度。

这是我使用的代码:

import cv2
import numpy as np
from skimage import io              # Only needed for web grabbing images; for local images, use cv2.imread(...)

def correct_orientation(img):

    print('\nImage:\n------')

    h, w = img.shape
    if (w > h):
        img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
        h, w = img.shape
        print('\nRotated 90 degrees')

    summed = np.sum(255-img, axis=0)

    if (np.sum(summed[30:130]) < np.sum(summed[w-130:w-30])):
        img = cv2.rotate(img, cv2.ROTATE_180)
        print('\nRotated 180 degrees')

    return img

correct_1 = io.imread('https://i.imgur.com/Gu8uAp6.jpg', as_gray=True)
rot_90 = io.imread('https://i.imgur.com/o97vu59.jpg', as_gray=True)
rot_180 = io.imread('https://i.imgur.com/XkBNfEb.jpg', as_gray=True)
correct_2 = io.imread('https://i.imgur.com/EvaioRS.jpg', as_gray=True)

images = [correct_orientation(img) for img in [correct_1, rot_90, rot_180, correct_2]]

给定图像的输出:

Image:
------

Image:
------

Rotated 90 degrees

Rotated 180 degrees

Image:
------

Rotated 180 degrees

Image:
------

在图像中,文档带有其他边框(蓝色或黑色)。这使得很难找到行的开始和结束。因此,在最终解决方案中应调整左侧和右侧区域的手动设置值。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.