如何在不导致溢出的情况下在 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。