如何在 Python 中一次将图像文件加载到 Exif 方向支持多个图像的 numpy 数组中?

How to load an image file into a numpy array with Exif orientation support for multiple images at once in Python?

正如标题所说,我正在尝试将图像文件加载到具有 Exif 方向支持的 numpy 数组中。我这样做是为了防止 upside-down 和 face_recognition 的横向图像,因为它不适用于 Iphone 拍摄的照片。为了解决这个问题,我正在使用这个脚本:

import matplotlib.pyplot as plt
import image_to_numpy

img = image_to_numpy.load_image_file("my_file.jpg")

plt.imshow(img)
plt.show()

这适用于一张图片,但我想创建一个循环来对文件夹中的多张图片执行此操作,并将其保存在不同的文件夹中。知道怎么做吗?

你是在说这样的事情吗?我很确定我在下面遗漏了一些东西:

import glob
import os
for i in range(10)
  filepath = glob.glob(os.path.join('path/images/', *.jpg))
  try:
      image=Image.open(filepath)

      for orientation in ExifTags.TAGS.keys():
          if ExifTags.TAGS[orientation]=='Orientation':
              break

      exif=dict(image._getexif().items())

      if exif[orientation] == 3:
          image=image.rotate(180, expand=True)
      elif exif[orientation] == 6:
          image=image.rotate(270, expand=True)
      elif exif[orientation] == 8:
          image=image.rotate(90, expand=True)

    image.save(filepath)
    image.close()
  except (AttributeError, KeyError, IndexError):
    # cases: image don't have getexif
    pass ```

我找到了这个答案:。

您唯一需要做的更改是将 image=Image.open(filepath) 中的 filepath 更改为原始图像文件路径和此文件路径, image.save(filepath) 更改为您要保存的文件路径图片到.

您可以使用 glob.glob() 来获取指定目录中您选择的格式的所有图像文件路径,方法如下:

import glob
import os

filepaths = glob.glob(os.path.join('path', 'to', 'my', 'directory', '*.jpg'))

然后只做一个for循环,打开图像,修改它们,最后将它们保存在您选择的目录中。希望这有帮助。