我认为您对EXIF的存储方向的能力感到犯规,有些观众会忽略。最简单的方法是使用ImageMagick,它包含在大多数Linux发行版中,并且可用于macOS和Windows。在终端或Windows中的命令提示符中使用此命令将首先更正方向,然后删除此设置,以免使观看者感到困惑:
magick input.jpg -auto-orient -strip result.jpg
如果使用v6 ImageMagick,则将magick
替换为convert
。
处理示例中所示的典型(矩形)paper sizes和从左至右的定向文本,可以做出以下两个假设:
这是我使用的代码:
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:
------
在图像中,文档带有其他边框(蓝色或黑色)。这使得很难找到行的开始和结束。因此,在最终解决方案中应调整左侧和右侧区域的手动设置值。
希望有帮助!