如何在 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循环,打开图像,修改它们,最后将它们保存在您选择的目录中。希望这有帮助。
正如标题所说,我正在尝试将图像文件加载到具有 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循环,打开图像,修改它们,最后将它们保存在您选择的目录中。希望这有帮助。