Как повернуть множество изображений под нужным мне углом?

У меня есть множество изображений. Все они повернуты хаотично, под разными углами, то есть если я их буду переворачивать с помощью функции .rotate(90), то некоторые повернуться так как нужно, а другие, которые уже были в нужном расположении сменят угол. Как быть в таком случае, что использовать? Размер изображения: (6736, 4768). Заранее, спасибо!

def rotate_img(input_file):
    output_files = []
    for i in input_file:
        x = cv2.imread(i)
        flip_image = cv2.flip(x, 0)
        output_files.append(flip_image)
    return output_files

Ответы (1 шт):

Автор решения: eri

Если фото снято на устройстве с гироскопом (телефон, современный фотоаппарат) то оно пишет в метаданные фото exif куда оно повернуто.


from PIL import Image, ExifTags

try:
    image=Image.open(filepath)

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

    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

Если таких данных нет или они перетерты, то крутить их придётся вручную.

→ Ссылка