Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Template matching not working as expected

I am very new to opencv and using for template matching.Actually i want to match two images below are my code snippet

    int match_method=Imgproc.TM_CCOEFF_NORMED;
    Mat temp = Imgcodecs.imread(tempim,Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE );
    Mat img = Imgcodecs.imread(sourceim,Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE );

    Size sz = new Size(200, 200);
    Mat resizeimage = new Mat();
    Imgproc.resize(img, resizeimage, sz);
    Mat sourceimage = resizeimage;

    Mat resizeimage2 = new Mat();
    Imgproc.resize(temp, resizeimage2, sz);
    Mat templateimage = resizeimage2;

    int result_cols = sourceimage.cols() - templateimage.cols() + 1;
    int result_rows = sourceimage.rows() - templateimage.rows() + 1;
    Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
    Imgproc.matchTemplate(sourceimage,templateimage, result, match_method);
    //Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());
     Imgproc.threshold(result, result,0.1,1.0,Imgproc.THRESH_TOZERO);

    Point matchLoc,maxLoc,minLoc;
    Core.MinMaxLocResult mmr;
    boolean iterate = true;
    double minlocvalue,maxlocvalue,minminvalue,maxmaxvalue;
    while(true){
        mmr = Core.minMaxLoc(result);

        if (match_method == Imgproc.TM_SQDIFF || match_method == Imgproc.TM_SQDIFF_NORMED) {
            matchLoc = mmr.minLoc;
            minminvalue = mmr.minVal; // test
        } else {
            matchLoc = mmr.maxLoc;
            maxmaxvalue = mmr.minVal; // test
        }
        Log.d(TAG, "mmr.maxVal : "+mmr.maxVal+ " "+sourceim);
    if(mmr.maxVal >=0.3)
        {
            Log.d(TAG, "imagemathed..");

            Imgproc.rectangle(sourceimage, matchLoc, new Point(matchLoc.x + templateimage.cols(),
                    matchLoc.y + templateimage.rows()), new Scalar(0, 255, 0));
            Imgcodecs.imwrite(outFile, img);
            Mat image = Imgcodecs.imread(outFile);

        }

when I am checking mmr.maxVal for same images some times I'M getting 0.333xxx value, some times i am getting 0.0. AM I doing anything wrong? Could you please help me to resolve the issue, why for same images also getting mmr.maxVal value is 0.0 Thanks in advance.