如何在不导致溢出的情况下在 javacv 中对 List<Mat> 取平均值?
How to average a List<Mat> in javacv without causing an overflow?
我有一堆来自 FFMpegGrabber 的帧,我正在尝试编写一个如下所示的方法:
private static Mat getAverage(List<Mat> mats) {
if (mats.size() == 0) {
throw new RuntimeException("no mats");
}
Mat first = mats.get(0);
Size s = first.size();
Mat total = new Mat(s);
MatExpr expr = new MatExpr(total);
for (Mat m : mats) {
expr = opencv_core.add(m, expr);
}
return opencv_core.multiply(expr, 1/mats.size()).asMat()
}
但这似乎溢出了,因为输出矩阵看起来根本不像平均值。我想知道是否有人知道更好的方法。
问题出在这一行:
return opencv_core.multiply(expr, 1/mats.size()).asMat()
应该是
return opencv_core.multiply(expr, 1.0/mats.size()).asMat()
整数除法导致一切都变为 0。
我有一堆来自 FFMpegGrabber 的帧,我正在尝试编写一个如下所示的方法:
private static Mat getAverage(List<Mat> mats) {
if (mats.size() == 0) {
throw new RuntimeException("no mats");
}
Mat first = mats.get(0);
Size s = first.size();
Mat total = new Mat(s);
MatExpr expr = new MatExpr(total);
for (Mat m : mats) {
expr = opencv_core.add(m, expr);
}
return opencv_core.multiply(expr, 1/mats.size()).asMat()
}
但这似乎溢出了,因为输出矩阵看起来根本不像平均值。我想知道是否有人知道更好的方法。
问题出在这一行:
return opencv_core.multiply(expr, 1/mats.size()).asMat()
应该是
return opencv_core.multiply(expr, 1.0/mats.size()).asMat()
整数除法导致一切都变为 0。