2013-04-03 168 views
2

我想使用模板匹配,我正在使用一个代码,我发现,做我想要的地方,它保持位图并获得位图的返回,问题是我不完全确定我怎么可以画在矩形。我只使用java,在为android创建应用程序时不使用本机。随着使用openCV,我是新的。我会得到多个比赛,所以我想要得到这些点的矩形,并且能够获得这些比赛的位置值。OpenCV模板匹配的绘制矩形匹配

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

回答

0

找到匹配您mResult,使用Core.rectangleInput的正确,而且写入文件这一点。

///Localizing the best match with minMaxLoc 
MinMaxLocResult mmr = Core.minMaxLoc(mResult); 

Point matchLoc; 
if (match_method == Imgproc.TM_SQDIFF || match_method == Imgproc.TM_SQDIFF_NORMED) { 
    matchLoc = mmr.minLoc; 
} else { 
    matchLoc = mmr.maxLoc; 
} 

///Show me what you got 
Core.rectangle(Input, matchLoc, new Point(matchLoc.x + templ.cols(), 
     matchLoc.y + templ.rows()), new Scalar(0, 255, 0)); 

// Save the visualized detection. 
System.out.println("Writing "+ outFile); 
Highgui.imwrite(outFile, img); 
+0

感谢您发布此(虽然3年前:))。使用您的方法时,绘制的矩形比模板图像大得多。怎样才能确保绘制正确的矩形边界?谢谢! – user3186023 2016-11-13 21:31:54