2012-12-16 44 views
4

我想创建一个模板匹配功能在Android上使用OpenCV与Java(不与本机)。templateMatching mattoBitmap opencv for android

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

下面是相关代码:

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的,据我所知的大小并不重要。

我需要的mResult垫转换的东西之前,我将它转换为BMP

我是否需要将bmp转换成某种东西,然后才能将垫子转换成它?

回答

2

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

+0

位图是ARGB8888 – user1768360

+0

我没有发现,有一个皈依问题,但我不知道 – user1768360

+1

感谢什么转换,第二个链接没有帮助我,我已经包括了库,我可以将位图转换为mat。我也可以将mat转换为位图,而不是从“matchTemplate”接收的特定类型。 (类型接收是5,当我把它转换为24像其他位图我得到一张黑色的照片)。 – user1768360

2

的问题是,matchTemplate()结果是浮点单通道垫 所以我需要正常化mResult载体。 解决办法是:

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

}