簡體   English   中英

通過OpenCV或JavaCV進行模板匹配

[英]Template matching via OpenCV or JavaCV

我需要使用Java實現模板匹配方法。 我發現此問題的OpenCV和JavaCV。 從OpenCV開始,我在http://www.tutorialspoint.com/上找到了一些教程(不知道為什么,但是最多只能創建一個黑色圖像)。 不管...

現在,我想嘗試一下:

http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

但是我不知道如何在Java中使用它(Eclipse中提供了OpenCV和JavaCV)。

對於JavaCV,我發現以下代碼:

IplImage src = cvLoadImage("new.png");
IplImage tmp = cvLoadImage("old.png");

IplImage result = cvCreateImage(cvSize(src.width()-tmp.width()+1, src.height()-    tmp.height()+1), IPL_DEPTH_32F, 1);
cvZero(result);

//Match Template Function from OpenCV
cvMatchTemplate(src, tmp, result, CV_TM_CCORR_NORMED);

double[] min_val = new double[2];
double[] max_val = new double[2];

CvPoint minLoc = new CvPoint();
CvPoint maxLoc = new CvPoint();

//Get the Max or Min Correlation Value      
cvMinMaxLoc(result, min_val, max_val, minLoc, maxLoc, null);

System.out.println(Arrays.toString(min_val));
System.out.println(Arrays.toString(max_val));

CvPoint point = new CvPoint();
point.x(maxLoc.x()+tmp.width());
point.y(maxLoc.y()+tmp.height());

cvRectangle(src, maxLoc, point, CvScalar.WHITE, 2, 8, 0);//Draw a Rectangle for Matched   Region

cvShowImage("Lena Image", src);
cvWaitKey(0);
cvReleaseImage(src);
cvReleaseImage(tmp);
cvReleaseImage(result);

但是,盡管我傳遞了文件,但我得到了NullPointerException。

有沒有人舉過一個例子,說明如何將模板與OpenCV或JavaCV配合使用,或者有一種簡單的方法無需任何庫即可完成此任務?

我個人盡可能嘗試使用OpenCV的Java綁定進行所有操作。 當某些內容無法與OpenCV的Java綁定一起使用時,我會回到JavaCV。 JavaCV看起來不錯,並且它的開發人員似乎在OpenCV發布后不久就發布了新版本,但從長遠來看,我猜測是將更好地支持OpenCV的Java綁定。

到目前為止,我發現唯一在OpenCV中不起作用的區域是一些面部識別和分類功能。

這是用於模板匹配的一些OpenCV Java。 我省略了循環以交換多個模板,並通過查看mmr中的結果來找到最佳匹配。

Mat mat = ...
Mat matTemplate = ...
// Create the result matrix
int resultCols = mat.cols() - matTemplate.cols() + 1;
int resultRows = mat.rows() - matTemplate.rows() + 1;
if ( resultCols > 0 && resultRows > 0 ) {   
Mat result = new Mat(resultRows, resultCols, CvType.CV_8UC1);
// Do the Matching
Imgproc.matchTemplate(mat, matTemplate, result, Imgproc.TM_CCOEFF_NORMED);
//  Normalize???
// Localizing the best match with minMaxLoc
MinMaxLocResult mmr = Core.minMaxLoc(result);

我敢肯定,您可以找到有關Java中OpenCV模板匹配方法的一些很好的資源。 我知道我做到了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM