2017-06-08 6 views
0

Ich versuche, den Durchschnitt einer Reihe von Bildern in Android mit OpenCV zu finden.Android OpenCV Averaging Bilder

Das Ergebnis ist jedoch ein vollständig weißes Bild. Diese

public static Mat averageAll(Mat[] matList){ 
     int type = matList[0].type(); 
     Mat avg = Mat.zeros(matList[0].height(),matList[0].width(),CV_32FC4); 
     Log.i("avg",""+avg.height()+" "+avg.width()+" "+avg.depth()+" "+avg.type()); 
     for(int i=0;i<matList.length;i++){ 
      Log.i(""+i,""+matList[i].height()+" "+matList[i].width()+" "+matList[i].depth()+" "+matList[i].type()); 
      matList[i].convertTo(matList[i],CV_32FC4); 
      Core.add(matList[i],avg,avg); 
     } 
     Core.divide(avg,new Scalar(matList.length),avg); 
     avg.convertTo(avg,type); 
     return avg; 
    } 

ist, wie ich die Matten aus Bitmaps erstellen

//imagesList is an arrayList of bitmaps 
Mat[] matList = new Mat[imagesList.size()] 
for(int k = 0; k<imagesList.size();k++){ 
    Mat m = new Mat(); 
    Utils.bitmapToMat(imagesList.get(k),m); 
    matList[k]=m; 
} 
Mat alignedM = ImageProcessor.averageAll(matList); 
+0

Ohne den Typ Ihrer _Mat_ in _matList_ kann ich nicht viel sagen. Was erwarten Sie von dem Ergebnis? Bitte geben Sie weitere Informationen an. –

+0

Der Typ der Mat-Liste wäre der gleiche wie das Ergebnis von 'Utils.bitmapToMap()', was ich für einen CV_8U halte. Bevor ich rechne, konvertiere ich sie zu einem CV_32FC4. Die Bilder sind RGB-JPGs. Das erwartete Ergebnis ist ein Bild, dessen Pixelwerte der Durchschnitt der entsprechenden Pixel jedes Bildes in der MatList sind. – xSooDx

+0

Wenn sie RGB sind, sollten sie nicht ** CV_8UC3 ** anstelle von ** CV_32FC4 ** sein? –

Antwort

0

ich das Problem gefunden.

Das Problem war mit Core.divide(avg,new Scalar(matList.length),avg);. Die Scalar-Klasse ist eigentlich ein 4-Element-Vektor.

Umwandlung in

Core.divide(avg,new Scalar(matList.length,matList.length,matList.length,matList.length),avg); 

ergab die gewünschte Ausgabe.