当前位置: 首页> 游戏> 游戏 > 图像处理方向信息

图像处理方向信息

时间:2025/7/9 15:18:57来源:https://blog.csdn.net/kuailebeihun/article/details/139568004 浏览次数:0次

前言

Exif 规范 定义了方向标签,用于指示相机相对于所捕获场景的方向。相机可以使用该标签通过方向传感器自动指示方向,也可以让用户通过菜单开关手动指示方向,而无需实际转换图像数据本身。

在图像处理过程中,若是原图文件包含了方向 Orientation 信息,会导致输出的图片在方向上有些许偏差。一般我们需要在处理图像之前将方向信息去掉,并将图像处理成正确的展示形式。

Orientation说明

拍摄图像时相机相对于场景的方向。“第 0 行”和“第 0 列”与视觉位置的关系如下所示。

第 0 行第 0 列描述
1顶部左边0度:正确方向,无需调整
2顶部右边水平翻转
3底部右边180度旋转
4底部左边水平翻转+180度旋转 (垂直翻转)
5左边顶部水平翻转+顺时针270度
6右边顶部顺时针270度
7右边底部水平翻转+顺时针90度
8左边底部顺时针90度

图例说明:
在这里插入图片描述

如何查看

系统自带的 preview 的显示检查器可直接查看:

在这里插入图片描述
在这里插入图片描述

通过命令行工具

Mac可以安装 brew install exiftool 后使用 exiftool 工具进行查看:
在这里插入图片描述

处理方式

既然知道了方向定义的含义,就按照相反的方式就行处理即可。

自己通过 Pillow 库实现了一个简单的方法:

from PIL import Imagedef reset_image_rotate(im: Image) -> Image:# 0x0112 EXIF tags: Orientation ,see PIL.ExifTags.TAGSorientation_code = im.getexif().get_ifd(0x0112)if orientation_code == 2:im = im.transpose(Image.Transpose.FLIP_LEFT_RIGHT)elif orientation_code == 3:im = im.transpose(Image.Transpose.ROTATE_180)elif orientation_code == 4:im = im.transpose(Image.Transpose.FLIP_TOP_BOTTOM)elif orientation_code == 5:im = im.transpose(Image.Transpose.TRANSPOSE)  # 矩阵转置elif orientation_code == 6:im = im.transpose(Image.Transpose.ROTATE_270)  # 逆时针270度elif orientation_code == 7:im = im.transpose(Image.Transpose.TRANSVERSE)elif orientation_code == 8:im = im.transpose(Image.Transpose.ROTATE_90)  # 逆时针90度return im

注意:后来查看Pillow官方文档时发现,库中已提供了现成的方法。

from PIL import ImageOpsimg = ImageOps.exif_transpose(img)

源码如下:

def exif_transpose(image):"""If an image has an EXIF Orientation tag, return a new image that istransposed accordingly. Otherwise, return a copy of the image.:param image: The image to transpose.:return: An image."""exif = image.getexif()orientation = exif.get(0x0112)method = {2: Image.FLIP_LEFT_RIGHT,3: Image.ROTATE_180,4: Image.FLIP_TOP_BOTTOM,5: Image.TRANSPOSE,6: Image.ROTATE_270,7: Image.TRANSVERSE,8: Image.ROTATE_90,}.get(orientation)if method is not None:transposed_image = image.transpose(method)transposed_exif = transposed_image.getexif()if 0x0112 in transposed_exif:del transposed_exif[0x0112]if "exif" in transposed_image.info:transposed_image.info["exif"] = transposed_exif.tobytes()elif "Raw profile type exif" in transposed_image.info:transposed_image.info["Raw profile type exif"] = transposed_exif.tobytes().hex()elif "XML:com.adobe.xmp" in transposed_image.info:transposed_image.info["XML:com.adobe.xmp"] = re.sub(r'tiff:Orientation="([0-9])"',"",transposed_image.info["XML:com.adobe.xmp"],)return transposed_imagereturn image.copy()

参考

  • Exif Orientation Tag (Feb 17 2002)
  • PIL.ImageOps.exif_transpose
关键字:图像处理方向信息

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: