cvMatchTemplate函數

功能:模板匹配是通過在輸入圖像上滑動模板圖像塊對實際的圖像塊和輸入圖像進行匹配,並且可以利用函數cvMinMaxLoc()找到最佳匹配的位置。例如在工業應用中,可以鎖定圖像中零部件的位置,並根據具體的位置,進行具體的處理。匹配的過程中可以使用不同的method,通過最合適的method,進行最合適的匹配。

函數形式:void cvMatchTemplate( const CvArr* image,const CvArr* templ, CvArr* result, int method ); 

參數列表

image      欲搜索的圖像。它應該是單通道、8-比特或32-比特 浮點數圖像

templ      搜索模板,不能大於輸入圖像,且與輸入圖像具有一樣的數據類型

result      比較結果的矩陣。單通道、32-比特浮點數.如果圖像是 W×Htemplw×h,則 result一定是 (W-w+1×(H-h+1)。從結果矩陣找到相似度最高的座標。

method   指定匹配方法:

CV_TM_SQDIFF平方差匹配法:該方法採用平方差來進行匹配;最好的匹配值爲0;匹配越差,匹配值越大。

CV_TM_CCORR相關匹配法:該方法採用乘法操作;數值越大表明匹配程度越好。

CV_TM_CCOEFF相關係數匹配法:1表示完美的匹配;-1表示最差的匹配。

CV_TM_SQDIFF_NORMED歸一化平方差匹配法

CV_TM_CCORR_NORMED歸一化相關匹配法

CV_TM_CCOEFF_NORMED歸一化相關係數匹配法


程序應用示例:

#include <opencv2\opencv.hpp>

#include <iostream>

#include <string>

using namespace cv;

using namespace std;

    int main() {  

        IplImage *src, *temp1, *ftmp;  

      

        if ((src = cvLoadImage("1.jpg", 1)) == 0) {  

            return -1;  

        }  

        if ((temp1 = cvLoadImage("1-1.png", 1)) == 0) {  

            return -1;  

        }  

      

        int iwidth = src->width - temp1->width + 1;  

        int iheight = src->height - temp1->height + 1;  

      

        ftmp = cvCreateImage(cvSize(iwidth, iheight), 32, 1);  

          

        double min_val;  

        double max_val;  

        CvPoint min_loc;  

        CvPoint max_loc;  

      

        cvMatchTemplate (src, temp1, ftmp, CV_TM_SQDIFF);  //使用CV_TM_SQDIFF方法匹配

        cvMinMaxLoc(ftmp, &min_val, &max_val, &min_loc, &max_loc, NULL);  //匹配圖像的座標

        cvRectangle(src, cvPoint(min_loc.x, min_loc.y),     cvPoint((min_loc.x + temp1->width),(min_loc.y + temp1->height)), CV_RGB(0,255,0), 1);  //畫矩形

        cvNamedWindow("src",1);  

        cvShowImage("src",src);  

        cvWaitKey(0);  

      

        return 0;  

}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章