在OpenCV for Android中添加两个32FC类型的Mat

时间:2015-07-08 11:13:11

标签: java android opencv image-processing

为了减少图像中的噪点,我试图获得10张图像的平均值。

Mat imgMain = new Mat(n_height, n_width, CvType.CV_32FC4);
Mat imgFin = new Mat(n_height, n_width, CvType.CV_32FC4);

for(int i=1; i <= 10; i++) {
    //Crop the image
    image.recycle();
    image = null;
    image = BitmapFactory.decodeFile("/storage/sdcard0/DCIM/A" + String.valueOf(i) + ".jpg");
    pimage = Bitmap.createBitmap(image, leftOff1, topOff1, n_width, n_height);
    Utils.bitmapToMat(pimage, imgMain);

    scaleAdd(imgMain, 0.1, imgFin, imgFin);
    }

运行应用程序,我收到以下消息:

  

引起:CvException [org.opencv.core.CvException:cv :: Exception:   /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/core/src/matmul.cpp:2079:   错误:(-215)src1.type()== src2.type()函数void   cv :: scaleAdd(cv :: InputArray,double,cv :: InputArray,cv :: OutputArray)       ]               at org.opencv.core.Core.scaleAdd_0(原生方法)               在org.opencv.core.Core.scaleAdd(Core.java:6690)               在MainActivity.imageAnalysis(MainActivity.java:123)

第123行是scaleAdd(imgMaing, 0.1, imgFin, imgFin);

根据reference,src1,src2和dst MAT应该具有相同的大小和类型。但是,当我将imgFin类型设置为32FC4但是当imgFin设置为8UC4时没有出现任何错误时,我收到此错误。有这种经历吗?我需要在imgFin中保留浮动数字,这就是为什么我不能使用8UC4。

1 个答案:

答案 0 :(得分:0)

// this line will overwrite your imgMain, 
// the type will be CV_8UC4, regardless, what you said before.
Utils.bitmapToMat(pimage, imgMain);

// so, convert to float:
imgMain.convertTo(imgMain, CvType.CV_32FC4);

// now add float images, to avoid precision loss:
scaleAdd(imgMain, 0.1, imgFin, imgFin);