为什么cv2.resize传入显式尺寸时输出维度与请求值相反?
维度不匹配的本质原因
核心问题来自于OpenCV接口和NumPy数组对图像维度的表示规则存在顺序差异:
- NumPy ndarray形式的OpenCV图像,
.shape属性的返回顺序固定为(图像高度, 图像宽度, 图像通道数)。比如代码里摄像头读取的帧shape为(480, 640, 3),代表图像垂直方向高480像素、水平方向宽640像素。 cv2.resize接口的目标尺寸参数dsize,要求传入的元组顺序固定为(目标宽度, 目标高度),和NumPy shape的顺序完全颠倒。
你代码里的问题出在对shape返回值的顺序误解:直接按shape的顺序解包成w, h, d = s1时,因为shape第一个值是高度,此时你定义的变量w实际存储的是图像高度480,变量h实际存储的是图像宽度640。传入cv2.resize的元组(w*2, h*2)实际计算结果为(960, 1280),刚好符合cv2.resize对(宽度, 高度)的参数要求,最终输出图像的NumPy shape自然是(高度1280, 宽度960, 3),和实际观察到的输出完全一致。
固定尺寸缩放的正确写法参考:若需要将原始480高、640宽的图像放大到960高、1280宽,
dsize参数需传入(1280, 960)——即先写目标水平宽度、再写目标垂直高度,不能直接照搬NumPy shape的顺序拼接参数。
内容的提问来源于stack exchange,提问作者user48956
相关产品推荐
相关产品推荐

