我已将此作为 OpenImaj 的 github 问题板上的潜在错误提交,但想联系 SO 并查看之前是否遇到过此问题(这不是一个不起眼的类/方法,如果我是第一个来的,我会感到惊讶在这个问题上)。我意识到这不是一个问题,而是一个提出的问题,但这值得其他人在他们使用这种方法的经验中发表评论。
https://github.com/openimaj/openimaj/issues/86
在尝试调整各种不受控制尺寸的照片时,我遇到了除以零异常。堆栈跟踪的相关部分如下:
线程“主”java.lang.ArithmeticException 中的异常:/
在 org.openimaj.image.processing.resize.ResizeProcessor.resizeMaxArea (ResizeProcessor.java:443) 处为零
经过进一步审查,它似乎只在图像高度大于宽度时发生。在这种情况下,whRatio 浮点数最终为 0,因为它在第 441 行执行整数除法。然后导致第 442 行的 newWidth 为 0,然后导致第 443 行的异常。
我一般对算法一无所知,所以我不知道这种变化是否会产生正确的值(我倾向于认为不是由于通过这种方法对图像进行的更改导致纵横比丢失),但是如果在将结果设置为 whRatio 之前将宽度/高度划分转换为浮动,则它不再产生 0 值(参见下面的代码)。
final int width = 2687;
final int height = 3356;
final int area = width * height;
final int maxArea = 3700000;
final float whRatio = (float) width / height;
System.out.println("whRatio: " + whRatio);
final double newWidth = Math.sqrt(maxArea * whRatio);
System.out.println("New width: " + newWidth);