2013-04-03 171 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