问题
I am trying to create a template matching function on Android using OpenCV with Java (not with native).
My problem is displaying the image. The class mattoBitmap works (in Java) but if I want to convert the result of the template matching function I get a FATAL EXCEPTION
when I call the Utils.matToBitmap
function.
Below is the relevant code:
void TemplateMatch() {
mFind = new Mat(256, 192, CvType.CV_8UC4);
Input = new Mat(256, 192, CvType.CV_8UC4);
mResult = new Mat(217, 153, CvType.CV_8UC4); // (bmp2 size is 40)
Utils.bitmapToMat(bmp2, mFind);
Utils.bitmapToMat(bmp1, Input);
Imgproc.matchTemplate(mFind, Input, mResult, Imgproc.TM_SQDIFF);
bmp3 = Bitmap.createBitmap(mResult.cols(), mResult.rows(), conf);
Utils.matToBitmap(mResult, bmp3);
iv2.setImageBitmap(bmp3);
}
The size of mResult to my knowledge is not important when it is created becuase it is set afterwards by the template match function.
Do I need to convert the mResult mat to something before I convert it to bmp?
Do I need to convert the bmp to something before I can convert the mat to it?
回答1:
You need to convert bitmap to RGBA format and vice versa. Maybe you need to take a look here: https://groups.google.com/group/android-opencv/ and here: Java openCV - Error while conevrting Bitmap to Mat
回答2:
The problem is that the matchTemplate()
result is a float point single channel Mat
so I needed to normalize the mResult vector.
the solution is:
void TemplateMatch(){
mFind=new Mat(256, 192, CvType.CV_8UC4);
Input = new Mat(256, 192, CvType.CV_8UC4);
Mat mResult8u = new Mat(256, 192, CvType.CV_8UC4);
mResult = new Mat(217, 153, CvType.CV_8UC4);
Utils.bitmapToMat(bmp2, mFind);
Utils.bitmapToMat(bmp1, Input);
Imgproc.matchTemplate(mFind, Input, mResult, Imgproc.TM_SQDIFF) ;
bmp3= Bitmap.createBitmap(mResult.cols(), mResult.rows(),Bitmap.Config.ARGB_8888);
Core.normalize(mResult, mResult8u, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
Utils.matToBitmap(mResult8u, bmp3);
iv2.setImageBitmap(bmp3);
}
来源:https://stackoverflow.com/questions/13900247/templatematching-mattobitmap-opencv-for-android