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

plt.imshow显示图像倒置而cv2_imshow正常,如何确认神经网络输入?

问题原因

导致两种显示方式出现差异的核心原因是图像读取工具对EXIF元数据或像素存储顺序的处理逻辑不同:

  • cv2.imread() 与 cv2_imshow() 的组合不会自动处理图像的EXIF方向标记,直接读取并显示原始像素数据;
  • mpimg.imread()(matplotlib的图像读取接口)会读取图像的EXIF方向信息并自动应用旋转/翻转,但如果图像的EXIF标记与实际像素方向不匹配(比如本地查看器已自动修正显示,但EXIF标记未同步更新),就会导致matplotlib显示时出现倒置。

另外,部分从PDF、扫描件导出的图像,其像素存储顺序本身是上下颠倒的,本地查看器和cv2_imshow会自动适配这种存储方式,而matplotlib默认按原始像素顺序显示,也会出现倒置情况。

解决方法

以下几种可靠方式可确保图像方向正确,避免影响模型精度:

方法1:读取后手动翻转图像

如果plt显示的图像是倒置的,直接对读取后的图像进行上下翻转即可:

import matplotlib.image as mpimg
import matplotlib.pyplot as plt

pt = '/content/content/DATA/testing_data/1/126056495_AO_BIZ-0000320943-Process_IP_Cheque_page-0001.jpg'
image = mpimg.imread(pt)
# 上下翻转图像
image_flipped = image[::-1, :]
plt.imshow(image_flipped)
# 模型输入使用image_flipped即可

方法2:统一用OpenCV读取并转换格式

因为cv2读取的图像显示正常,可先用cv2读取,再转换为matplotlib支持的RGB格式(cv2默认读取BGR格式):

import cv2
import matplotlib.pyplot as plt

pt = '/content/content/DATA/testing_data/1/126056495_AO_BIZ-0000320943-Process_IP_Cheque_page-0001.jpg'
# cv2读取BGR格式图像
img = cv2.imread(pt)
# 转换为RGB格式供matplotlib显示
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
# 模型输入可直接用cv2读取的图像(若模型需要RGB格式则转RGB)

方法3:处理EXIF方向信息

如果是EXIF标记导致的问题,可用PIL库读取并自动修正EXIF方向:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

pt = '/content/content/DATA/testing_data/1/126056495_AO_BIZ-0000320943-Process_IP_Cheque_page-0001.jpg'
# 读取图像并自动处理EXIF方向
image = Image.open(pt).convert('RGB')
plt.imshow(image)
# 转换为numpy数组供模型使用
image_np = np.array(image)
对模型精度的影响

只要确保输入模型的图像是正立的(与你训练/标注时的图像方向一致),就不会影响模型精度。建议统一使用一种读取方式(比如OpenCV或PIL),避免因处理逻辑不同导致输入图像方向混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:56:55