2016-11-29 2 views
0

Ich habe eine Reihe von Rahmen aus FFMpegGrabber, und ich versuche, eine Methode zu schreiben, die wie folgt aussieht:Wie wird eine Liste <Mat> in javacv gemittelt, ohne einen Überlauf zu verursachen?

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() 
} 

Aber das scheint, wie es da überfüllt ist die Ausgangsmatrix wie ein Durchschnitt sieht gar nicht. Ich habe mich gefragt, ob jemand einen besseren Weg kennt, dies zu tun.

Antwort

0

Das Problem war, diese Zeile:

return opencv_core.multiply(expr, 1/mats.size()).asMat() 

Es

return opencv_core.multiply(expr, 1.0/mats.size()).asMat() 

Die Integer-Division alles nur verursachte lesen sollte auf 0

gehen
Verwandte Themen