1

cvMatchTemplate 関数を試して、2 つの画像 (テンプレートと画像) を比較しました。

    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);

望ましい結果が得られましたが、2 つ以上の画像をテンプレートと比較する方法が見つかりませんでした。得られた結果画像を asCvMat を使って行列に変換し、元の画像の各ピクセルの一致確率の行列を取得しました。OpenCv の行列式関数を見つけて、2 つの行列を比較して、どちらの画像がテンプレートにより近いかを理解しましたが、JavaCv で対応する関数を見つけることができませんでした。

結果を比較して、どの画像がより近いかを判断する方法はありますか。私は ObjectFinder に出くわしましたが、その使用方法に関する適切なドキュメントを見つけることができませんでした。

私の問題を解決するのに役立つかもしれない特定のリンクまたは例を指摘してください。

4

1 に答える 1

0

max_val を比較することで、画像マッチングの結果を比較できます。方法を CV_TM_SQDIFF_NORMED に変更してから、0 から 1 の間の max_val のしきい値を設定できます。

于 2012-08-22T13:56:41.440 に答える