为何向cv.resize传入np.shape获取的元组时需交换元素?
为什么cv.resize需要交换np.shape的元素?
NumPy的shape规则:
np.shape返回的元组是(行数, 列数),对应图像的高度(垂直像素数)、宽度(水平像素数)。比如代码里(rows, cols) = np.shape(gray),rows是图像上下方向的像素总数,cols是左右方向的。OpenCV resize的参数规则:
cv.resize的第二个参数dsize要求传入(宽度, 高度),也就是先水平方向的像素数,再垂直方向的。这是因为OpenCV沿用了视觉领域的坐标习惯——x轴对应水平宽度,y轴对应垂直高度,参数顺序和坐标轴顺序一致。两者的适配逻辑:所以从
np.shape拿到的(rows, cols)(高度、宽度),必须转成(cols, rows)(宽度、高度)传给resize,才能保证缩放比例正确。你代码里(cols * 2, rows * 2)就是把宽高都放大2倍,完全符合resize的参数要求。
举个实际例子:如果原图是480行(高480)、640列(宽640),np.shape返回(480,640),传给resize的参数就得是(640*2, 480*2),这样缩放后的图像就是1280宽、960高,和原图像比例完全一致。
内容的提问来源于stack exchange,提问作者CapelliC
相关产品推荐
相关产品推荐

