Windows与Python OpenCV2中图像宽高显示不一致问题咨询
问题解析:OpenCV读取图像的宽高顺序差异
这其实是OpenCV和Windows系统对图像维度定义的顺序差异导致的,你没忽略什么复杂的点,只是两者的“宽高”对应逻辑不一样而已~
核心原因:
- Windows系统的属性里,宽度是横向像素数,高度是纵向像素数,也就是我们日常认知的“宽×高”(比如你说的4032宽、3024高,是横向有4032个像素,纵向3024个)。
- 但OpenCV用
cv2.imread()读取图像后,返回的是一个NumPy数组,数组的shape属性顺序是 (高度, 宽度, 通道数)。这里的“高度”对应图像的纵向像素数,“宽度”对应横向像素数——刚好和Windows显示的顺序反过来了!
举个例子验证:
假设你用Windows看的图像是宽4032、高3024,那用OpenCV读取后:
import cv2 img = cv2.imread("your_image.jpg") print(img.shape) # 会输出 (3024, 4032, 3)
这里的3024是纵向像素数(对应Windows的高度),4032是横向像素数(对应Windows的宽度)。
为什么转纵向模式也没变化?
你把图像转为纵向模式,其实是旋转了图像的内容,但Windows属性里的宽高会跟着旋转后的实际尺寸调整,而OpenCV读取后的shape始终是先纵向像素数(高度)、后横向像素数(宽度)——它只关心像素矩阵的排列顺序,和图像的视觉朝向无关。比如旋转后Windows显示宽3024、高4032,OpenCV读取的shape就会变成(4032, 3024, 3),依然是先高后宽的顺序。
如何正确获取和Windows一致的宽高?
如果你想得到和Windows属性一致的宽高,只需要把shape的前两个维度反过来取:
height, width = img.shape[:2] # 要得到Windows里的宽高顺序,就是 width, height print(f"Windows风格宽高:{width} × {height}")
内容的提问来源于stack exchange,提问作者Selva Prakash
相关产品推荐
相关产品推荐

