基于exif信息进行图片方向旋转修正

基于exif信息进行图片方向旋转修正

在处理标注数据的时候,发现标注框不吻合在这里插入图片描述经过分析发现标注软件在读取图片时,读取了图片的exif信息,并对图片进行了旋转,所以标注的坐标时旋转后的坐标。
解决方法有两种,一是旋转坐标,二是旋转图片,这里展示图片旋转的方法:

# coding:utf-8
import glob
import json
import os


import PIL.ExifTags
import PIL.Image
import PIL.ImageOps
import imageio
import numpy as np

import cv2
def update_image_files():
    # 图片所在的文件夹
    image_dir = "chinese_ocr_rec"
    # 过滤出jpg图片
    image_files = glob.glob(os.path.join(image_dir, "*.jpg"))
    image_files.sort()
    for image_file in image_files:
        with open(image_file, 'rb') as f:
            # 打开图片
            image = PIL.Image.open(f)
            # 图片旋转
            image = apply_exif_orientation(image)
            # 使用opencv读取,去除exif信息
            img = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
        # 保存图片
        cv2.imwrite(image_file, img)

# 此方法为标注软件里图片旋转的方法         
def apply_exif_orientation(image):
    try:
        exif = image._getexif()
    except AttributeError:
        exif = None

    if exif is None:
        return image

    exif = {
        PIL.ExifTags.TAGS[k]: v
        for k, v in exif.items()
        if k in PIL.ExifTags.TAGS
    }

    orientation = exif.get('Orientation', None)

    if orientation == 1:
        # do nothing
        return image
    elif orientation == 2:
        # left-to-right mirror
        return PIL.ImageOps.mirror(image)
    elif orientation == 3:
        # rotate 180
        return image.transpose(PIL.Image.ROTATE_180)
    elif orientation == 4:
        # top-to-bottom mirror
        return PIL.ImageOps.flip(image)
    elif orientation == 5:
        # top-to-left mirror
        return PIL.ImageOps.mirror(image.transpose(PIL.Image.ROTATE_270))
    elif orientation == 6:
        # rotate 270
        return image.transpose(PIL.Image.ROTATE_270)
    elif orientation == 7:
        # top-to-right mirror
        return PIL.ImageOps.mirror(image.transpose(PIL.Image.ROTATE_90))
    elif orientation == 8:
        # rotate 90
        return image.transpose(PIL.Image.ROTATE_90)
    else:
        return image

旋转后:
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值