1

我尝试了 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,但找不到有关如何使用它的正确文档。

请指出某些可以帮助我解决问题的链接或示例。

4

1 回答 1

0

您可以通过比较 max_val 来比较图像匹配结果,我什至会将方法更改为 CV_TM_SQDIFF_NORMED,然后您可以为 max_val 设置一个介于 0 到 1 之间的阈值。

于 2012-08-22T13:56:41.440 回答