我试图使用OpenCV找到Android中图像数组的平均值。
然而,结果是完全白色的图像。
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;
}
这就是我从位图创建Mats的方法
//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 :(得分:0)
我发现了问题。
问题出在Core.divide(avg,new Scalar(matList.length),avg);
上。 Scalar类实际上是一个4元素向量。
将其转换为
Core.divide(avg,new Scalar(matList.length,matList.length,matList.length,matList.length),avg);
给出了所需的输出。