templateMatching mattoBitmap opencv for android

时间:2012-12-16 10:05:10

标签: java android templates opencv fatal-error

我正在尝试使用OpenCV和Java(不是原生)在Android上创建模板匹配功能。

我的问题是显示图像。类 mattoBitmap 工作(在Java中),但如果我想转换模板匹配函数的结果,当我调用FATAL EXCEPTION函数时,我得到Utils.matToBitmap

以下是相关代码:

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);

}

mResult的大小在我创建时并不重要,因为它是由模板匹配函数设置的。

在将其转换为 bmp 之前,是否需要将 mResult mat 转换为某些内容?

在将mat转换为mat之前,是否需要将 bmp 转换为某些内容?

2 个答案:

答案 0 :(得分:2)

您需要将位图转换为RGBA格式,反之亦然。也许你需要看看这里:https://groups.google.com/group/android-opencv/和这里:Java openCV - Error while conevrting Bitmap to Mat

答案 1 :(得分:2)

问题是matchTemplate()结果是浮点单通道Mat 所以我需要规范化mResult载体。 解决方案是:

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);

}