You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么matplotlib展示指定JPG图片时会自动旋转原始图像?

问题原因及解决方案

核心原因

这个问题是JPEG图片内置的*EXIF方向元数据(Orientation Tag)*导致的:

  • 手机、相机等拍摄设备拍摄照片时,会把设备握持方向写入图片的EXIF元数据的Orientation字段,不会直接修改图片的原始像素矩阵
  • Pillow的Image.open()方法默认不会主动读取并应用该方向字段的旋转要求,matplotlib的imshow方法会直接渲染原始像素矩阵,就会出现显示方向和普通看图软件不一致的情况
  • 其余图片可以正常显示,是因为这些图片的EXIF Orientation字段为默认的正常方向值,无需额外旋转即可正常显示

修复方法

调用Pillow内置的ImageOps.exif_transpose()方法即可自动根据EXIF元数据校正图片方向,修改后的代码如下:

import matplotlib.pyplot as plt
from PIL import Image, ImageOps

image = Image.open("yolov5_dataset/images/test/photo_alb_id.json_98.jpg")
# 执行EXIF方向校正
image = ImageOps.exif_transpose(image)
plt.imshow(image)
plt.show()

如果是批量处理YOLO数据集,可以在数据集加载阶段统一对所有图片执行该校正操作,避免后续训练、推理环节出现图片方向不匹配的问题。

内容的提问来源于stack exchange,提问作者Dalireeza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:24:03