为了减少图像中的噪点,我试图获得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。
答案 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);