[英]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.