EmguCv模板匹配

2021-09-10 03:17:03 字數 2398 閱讀 2676

模板匹配是一種最原始、最基本的模式識別方法,研究某一特定物件物的圖案位於影象的什麼地方,進而識別物件物,這就是乙個匹配問題。它是影象處理中最基本、最常用的匹配方法。模板匹配具有自身的侷限性,主要表現在它只能進行平行移動,若原影象中的匹配目標發生旋轉或大小變化,該演算法無效。

先貼上簡陋的介面圖 

mat temp = new mat("模板.jpg", emgu.cv.cvenum.loadimagetype.anycolor);//匹配的模板

//建立mat 儲存輸出匹配結果。

mat result = new mat(new size(src.width - temp.width + 1, src.height - temp.height + 1),

emgu.cv.cvenum.depthtype.cv32f, 1);

#region 模板匹配引數說明

//採用係數匹配法,匹配值越大越接近準確影象。

//iinputarray image:輸入待搜尋的影象。影象型別為8位或32位浮點型別。設影象的大小為[w, h]。

//iinputarray templ:輸入模板影象,型別與待搜尋影象型別一致,並且大小不能大於待搜尋影象。設影象大小為[w, h]。

//ioutputarray result:輸出匹配的結果,單通道,32位浮點型別且大小為[w - w + 1, h - h + 1]。

//templatematchingtype method:列舉型別識別符號,表示匹配演算法型別。

//sqdiff = 0 平方差匹配,最好的匹配為 0。

//sqdiffnormed = 1 歸一化平方差匹配,最好效果為 0。

//ccorr = 2 相關匹配法,數值越大效果越好。

//ccorrnormed = 3 歸一化相關匹配法,數值越大效果越好。

//ccoeff = 4 係數匹配法,數值越大效果越好。

//ccoeffnormed = 5 歸一化係數匹配法,數值越大效果越好。

#endregion

cvinvoke.matchtemplate(src, temp, result, emgu.cv.cvenum.templatematchingtype.ccoeff);

#region 歸一化函式引數說明

//iinputarray src:輸入資料。

//ioutputarray dst:進行歸一化後輸出資料。

//double alpha = 1; 歸一化後的最大值,預設為 1。

//double beta = 0:歸一化後的最小值,預設為 0。

#endregion

cvinvoke.normalize(result, result, 255, 0, emgu.cv.cvenum.normtype.minmax);

double max = 0, min = 0;//建立double的極值。

point max_point = new point(0, 0), min_point = new point(0, 0);

#region 極值函式引數說明

//iinputarray arr:輸入陣列。

//ref double minval:輸出陣列中的最小值。

//ref double maxval; 輸出陣列中的最大值。

//ref point minloc:輸出最小值的座標。

//ref point maxloc; 輸出最大值的座標。

//iinputarray mask = null:蒙版。

#endregion

cvinvoke.minmaxloc(result, ref min, ref max, ref min_point, ref max_point);

cvinvoke.rectangle(src, new rectangle(max_point, temp.size), new mcvscalar(0, 0, 255), 3);//繪製矩形,匹配得到的效果。

tb_result.text = "min=" + min + ",max=" + max;

tb_result.text += environment.newline;

tb_result.text += "最大值座標:"+ max_point.tostring();

tb_result.text += environment.newline;

tb_result.text += "最小值座標:" + min_point.tostring();

ib_original.image = src;

33 SIFT特徵匹配(EmguCV學習)

懶了很久,還有最後一點兒,全部整理完 1 sifi運算元使用流程 初始化sift向量,呼叫detect 方法識別兩張各自的特徵點 使用sift的compute 方法計算計算兩張各自特徵點的特徵描述符 使用匹配器matcher進行特徵描述符匹配 bf與flann 以其中一幅為模板,在另一幅中尋找匹配的...

關於emgucv的書 精選 EMGUCV基礎

第一章 emgu cv 簡介 emgu cv 是.net 平台下對 opencv 影象處理庫的封裝。也就是opencv 的.net 版。它執行在 net 相容的程式語言下呼叫 opencv 的函式,如 c vb vc 等。同時這個 封裝庫可以在 mono 下編譯和在 linux mac os x 上...

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...