我尝试过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,但找不到如何使用它的正确文档。
请指出可能有助于我解决问题的某些链接或示例。
答案 0 :(得分:0)
您可以通过编译max_val来比较图像匹配结果 我甚至会将方法更改为CV_TM_SQDIFF_NORMED,然后您可以设置max_val的阈值,该阈值介于0到1之间。