此问题答案中的代码对某些缩放因子值产生错误。
正如@kg_sYy在注解中提到的,“* int(np.round(h * zoom_factor))
中的舍入有时会导致生成的图像比目标小1个像素。然后计算得到-1作为diff,您得到的图像像素大小为1用于输出。更改为np.ceil()
而不是np.round()
似乎可以修复它。*”但是,更改为np.ceil()
并不能修复错误。
例如,zoom_factor = 1.1317
和图像shape (331, 331, 3)
导致zoomed_img
的大小为一个像素。
还有哪种舍入函数可以解决此问题?为什么会出现此问题?
1条答案
按热度按时间svgewumm1#
为什么它变成了一个像素
您所链接的代码假设:
out
由于舍入可能仍略大于img
,因此请修剪掉边缘的任何多余像素然后不做任何检查就进行修剪。当
out
实际上小于img
时,缩放后的图像变成1个像素(正如注解中提到的,由于舍入错误)。然后以下计算失败:由于新图像实际上小于
(h, w)
,因此trim_top
和trim_left
实际上是负数(根据经验为-1)。最后的修剪实际上是:
这只是右下角的像素[-1,-1]。
如何修复
out
等于或大于img
。使用ceil()
* 应该 * 可以处理这个问题。(看看是否可以找到out
仍然小于img
的任何图像大小和缩放因子。)out
之前,请检查它是否确实大于img
。