templateMatching mattoBitmap opencv for android

时光毁灭记忆、已成空白 提交于 2019-12-10 17:14:43

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!