在Python中准确的图像宽高比

0 投票
2 回答
8750 浏览
提问于 2025-04-18 12:38

我有一段代码用来计算图片的宽高比。

img0 = color.rgb2gray(io.imread("C:\\work\\TRAIN\\SET1\\bus.jpg"))
img0 = resize(img0, (40, 116))
ar = 1.0 * (img0.shape[1]/img0.shape[0])
print "aspect ratio: " 
print ar

输出的结果是 2.0。但这不对。对于一张宽度为116,高度为40的图片,宽高比应该是 116/40 = 2.9

我的计算哪里出错了呢?

2 个回答

1

你遇到的问题是,img0.shape[1]和img0.shape[0]都是整数。你进行了整数除法,然后把结果转换成了浮点数。你可以试试:

float(img0.shape[1]) / img0.shape[0]

或者

1.0 * img0.shape[1] / img0.shape[0]

或者,我推荐的方法是在文件的第一行加上这个导入:

from __future__ import division

这样一来,使用“/”时就总是进行浮点数计算,避免出现这种情况。如果你想专门使用整数除法,可以用“//”,比如10 // 3。

2

116/40 在 Python 2.x 中会进行一种叫做“向下取整”的运算,也就是结果会被舍去小数部分,直接取整。

如果你想要得到小数结果,可以用类似 float(img0.shape[1]) / img0.shape[0] 这样的写法,这样就能得到浮点数的除法(在 Python 3.x 中,使用 / 默认就是浮点数除法)。

最好的办法可能是使用 from __future__ import division(在你的脚本中最开始的地方) - 这样可以确保你的脚本在 Python 2.x 和 Python 3.x 中都使用浮点数除法。

撰写回答