在Python中准确的图像宽高比
我有一段代码用来计算图片的宽高比。
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 中都使用浮点数除法。