Android OpenCV平均图像

时间:2017-06-08 12:03:03

标签: android opencv

我试图使用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);

1 个答案:

答案 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);

给出了所需的输出。