(25 模板匹配

2021-08-21 12:47:43 字數 1637 閱讀 4242

/*

*模板匹配(template match)

模板也是一幅影象,是乙個小的子圖象,要在大的裡找到與小完全相同或者相似的,這個過程就叫做匹配,匹配的

過程就叫做模板匹配

1:模板匹配就是在整個影象區域發現與給定子影象匹配的小塊區域。

2:所以模板匹配首先需要乙個模板影象t(給定的子影象)

3:另外需要乙個待檢測的影象-源影象s,有的**裡面叫做目標影象,就是到什麼目標影象上去尋找模板上面的東西

4:工作方法,在帶檢測影象上,從左到右,從上向下計算模板影象與重疊子影象的匹配度,匹配程度越大,兩者相同的可能性越大。

說白了,模板的影象是乙個資料,跟它下面重疊的影象區域也是乙個資料,我們要尋找這兩個資料的相似性和相似度

*匹配演算法介紹

opencv中提供了六種常見的匹配演算法如下:

1:計算平方不同 最小越匹配

2:計算相關性 越相關值越大

3:計算相關係數 越相關值越大 以上三種方法得到的還不是歸一的,還要把它變到0-1這個大小空間,所以還有它們歸一化的方法,因為0-1,所以歸一化的方法很容易給定閾值

4:計算歸一化平方不同

5:計算歸一化相關性

6:計算歸一化相關係數

*相關api介紹cv::matchtemplate

matchtemplate(

inputarray image, // 源影象,必須是8-bit或者32-bit浮點數影象

inputarray templ, // 模板影象,型別與輸入影象一致

outputarray result, // 輸出結果,必須是單通道32位浮點數,

//假設源影象wxh,模板影象wxh,則結果必須為w-w+1, h-h+1的大小。

int method, //使用的匹配方法

inputarray mask=noarray()//(optional)

)*/#include #include using namespace std;

using namespace cv;

mat src, temp, dst;

int match_method = tm_sqdiff;

int max_track = 5;

void match_demo(int, void*);

int main(int argc, char** argv)

void match_demo(int, void*)

else

src.copyto(dst); //左上角座標 寬和高就是那張影象

rectangle(dst, rect(temloc.x, temloc.y, temp.cols, temp.rows), scalar(0, 0, 255), 2, 8); //把位置繪製出來其實就是,繪製矩形,在dst上面繪製

rectangle(result, rect(temloc.x, temloc.y, temp.cols, temp.rows), scalar(0, 0, 255), 2, 8); //在模板匹配結果result上面繪製矩形,它被我們搞到0-1了

imshow("output", result);

imshow("src", dst);

}

OpenCV模板匹配

include include opencv2 opencv.hpp using namespace std using namespace cv int main int argc,char argv load reference image img imread argv 1 always ch...

opencv模板匹配

模板匹配是一種用於在源影象s中尋找定位給定目標影象t 即模板影象 的技術。其原理很簡單,就是通過一些相似度準則來衡量兩個影象塊之間的相似度similarity s,t 2.用途 模板匹配方法常用於一些平面影象處理中,例如印刷中的數字 工業零器件等小尺寸目標影象識別分類。3.方法 模板匹配中,源影象和...

模板匹配opencv

模板匹配,就是在一幅影象中尋找另一幅模板影象最匹配 也就是最相似 的部分的技術。說的有點抽象,下面給個例子說明就很明白了。在上面這幅全明星照中,我們想找出姚明頭像的位置,並把它標記出來,可以做到嗎?可以,這就是模板匹配的要做的事情。其實模板匹配實現的思想也是很簡單很暴力的,就是拿著模板 姚明頭像 在...