JavaCv比较三个以上的图像

时间:2012-08-11 15:38:47

标签: opencv image-recognition javacv

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

请指出可能有助于我解决问题的某些链接或示例。

1 个答案:

答案 0 :(得分:0)

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