基於模板匹配的程式(可以作為面部識別的哦)

2021-09-06 01:30:11 字數 1558 閱讀 1903

模板匹配是一項在一幅影象中尋找與另一幅模板影象最匹配部分的技術,模板匹配技術是由matchtemplate()函式完成,但是此項技術不是基於直方圖的,是通過在輸入影象上滑**像塊,對實際的影象塊和輸入影象進行匹配的一種匹配方法:

滑動模板影象來尋找影象中和模板影象最匹配的部分實現模板匹配:

matchtemplate()函式用於匹配出和模板重疊的影象區域

c++:void matchtemplate(inputarray image,inputarray template,outputarray result,int method);

1.表示待搜尋的影象,且需要為8位或者32位浮點型影象

2.表示搜尋模板,需要和原影象有相同的資料型別,且尺寸不能大於源影象

3.outputarray型別的result,比較結果的對映影象,其必須為單通道,32位浮點型影象,如果影象尺寸是wh的template的尺寸是wh的則result的型別為:(w-w+1,h-h+1)

4.int型別的method,指定的匹配方法,opencv提供了6種影象匹配的方法可供使用。

1.平方差匹配法 method=tm_sqdiff

2.歸一化平方差匹配法 method=tm_sqdiff_normed

3.相關匹配法 method=tm_ccorr;

4.歸一化相關匹配法 method=tm_ccorr_normed

5.係數匹配法: method=tm_ccoeff

6.化相關係數匹配法 method=tm_ccoeff_normed

通常,隨著簡單的測量(平方差)到更為複雜的測量(相關係數),我們獲得了越來越準確的匹配,越精確的匹配意味著計算量大為代價,比較科學的辦法就是對所有的這些方法多次測試實驗,以便為自己的應用選擇同時兼顧速度和精度的最佳方案。

以下是乙個單一基於模板匹配的人臉識別:使用方法就是給自己拍一張**放到自己的工程中,然後在程式中定義就可以了,編譯就可以直接用,檢測出你的臉:

#include

#include

#include

#include

using namespace cv;

using namespace std;

mat srcimg,templateimg,resultimg;

int matchmethod=tm_ccoeff_normed;

int main()

rectangle(srcimg1,matchlocation,point(matchlocation.x+templateimg.cols,matchlocation.y+templateimg.rows),scalar(0,255,0),2,8,0);

//rectangle(resultimg,matchlocation,point(matchlocation.x+templateimg.cols,matchlocation.y+templateimg.rows),scalar(0,255,0),2,8,0);

imshow("原圖",srcimg1);

//imshow("效果圖",resultimg);

waitkey(20);

}return 0;

C 中vector可以作為map的鍵值

因為專案中需要根據狀態找到乙個對應的結果,就採用了map的結構,但是狀態本身較為複雜,存在乙個vector中。上次使用map的經驗是自定義類型別作為鍵值必須過載 操作符,因為map的快速查詢是基於紅黑樹的構建,因而鍵值必須能相互之間比較。所以擔心vector作為類型別的鍵值會引發一些錯誤,就寫了乙個...

自定義型別是否可以作為Map的Key問題

雖說經常用map,但是我用它的時候,key都是用string或者integer型別,今天偶然想到,可不可以用自己定義的物件作為map的key呢?talk is cheap give me code class student public student string name,string pub...

資料倉儲專題(11) 可以作為維度表使用的事實表

事實表從粒度的角度分為三種,分別是交易粒度事實表 週期快照事實表和累計快照事實表。交易粒度事實錶能提供某個確切時刻的描述資訊。以銀行帳戶中儲存的客戶資訊為例來說,機構會週期的更新客戶的名稱 位址 號碼 客戶分類 信用等級 風險等級及其他描述性資訊。建立的交易粒度事實表如下所示 變更日期 fk 帳戶號...