我需要用Java实现模板匹配方法。我找到了OpenCV和JavaCV来解决这个问题。从OpenCV开始,我在http://www.tutorialspoint.com/找到了一些教程(不知道为什么,但最多只能创建一个黑色图像)。无论......
现在我想尝试一下:
http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
但我不知道如何在Java中使用它(OpenCV和JavaCV在Eclipse中提供)。
对于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匹配的示例,还是有一种简单的方法可以在没有任何库的情况下完成此任务?
答案 0 :(得分:4)
我个人尝试使用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进行模板匹配的好资源。我知道我做了。