为了减少图像中的噪声,我试图得到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. cn]CvException:简历::例外:/hdd2/buildbot/奴隶/slave_ardbeg1/50-SDK opencv/模块/核心/src/matmul.cpp: 2079:错误:(-215)src1.type() == src2.type() in function voidcv::scaleAdd(cv::InputArray, double, cv::InputArray, cv::OutputArray)]在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);
根据参考,src1, src2和dst MAT应该是相同的大小和类型。然而,当我将imgFin类型设置为32FC4时,我得到这个错误,但当imgFin设置为8UC4时,我没有得到任何错误。你有过这样的经历吗?我需要在imgFin中保持浮点数,这就是为什么我不能使用8UC4。
// 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);