我尝试了 cvMatchTemplate 函数来比较两个图像(一个模板和一个图像)。
IplImage img = cvLoadImage("thumbnail.jpg");
IplImage template = cvLoadImage("temp.jpg");
IplImage result = cvCreateImage(cvSize(img.width()-template.width()+1, img.height()-template.height()+1), IPL_DEPTH_32F, 1);
int method = CV_TM_SQDIFF;
cvMatchTemplate(img,template,result,method);
cvShowImage("res",result);
double[] min_val = new double[2];
double[] max_val = new double[2];
//Where are located our max and min correlation points
CvPoint minLoc = new CvPoint();
CvPoint maxLoc = new CvPoint();
cvMinMaxLoc(result, min_val, max_val, minLoc, maxLoc, null); //the last null it's for optional mask mat()
CvPoint point = new CvPoint();
point.x(minLoc.x()+template.width());
point.y(minLoc.y()+template.height());
cvRectangle(img, minLoc, point, CvScalar.WHITE, 2, 8, 0); //Draw the rectangle result in original img.
cvShowImage("Image", img);
cvWaitKey(0);
//Release
cvReleaseImage(img);
cvReleaseImage(template);
cvReleaseImage(result);
我得到了想要的结果,但找不到将两个或更多图像与模板进行比较的方法。我使用 asCvMat 将获得的结果图像转换为矩阵,并得到原始图像每个像素的匹配概率矩阵。我在 OpenCv 中遇到了行列式函数来比较两个矩阵以了解哪些图像与模板更接近,但在 JavaCv 中找不到相应的函数。
有什么方法可以比较结果并确定哪个图像更匹配。我确实遇到了 ObjectFinder,但找不到有关如何使用它的正确文档。
请指出某些可以帮助我解决问题的链接或示例。