open cv模板匹配

2021-10-07 04:04:16 字數 3485 閱讀 7616

模板匹配介紹(template match)

模板匹配:模板匹配是一項在一幅影象中尋找與另一幅模板影象最匹配(相似)部分的技術

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

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

另外需要乙個待檢測的影象s

工作方法:在待檢測影象上,從左到右,從上向下計算模板影象與

重疊子影象的匹配度(這樣的搜尋策略叫做滑動視窗) 匹配程度越大,兩者相同的可能性越大

(工作原理類似於卷積操作 逐畫素尋找匹配畫素)

尋找子影象和目標影象直方資料的相似程度

!!!模板匹配具有自身的侷限性,主要表現在它只能進行平行移動

原影象中的匹配目標發生旋轉或大小變化,該演算法無效

2、匹配演算法方法介紹

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

3、相關api介紹

cv::matchtemplate

matchtemplate(

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

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

outputarray result,//輸出矩陣影象結果,必須是單通道32bit浮點數。例如:

假設原影象大小是wh,模板影象大小是wh,那麼結果大小必須為(w-w+1)*(h-h+1)。

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

inputarray mask=noarray()//(optional)//掩膜矩陣 選擇操作區域 一般不使用

)

#include

#include

#include

#include

using

namespace cv;

using

namespace std;

mat src,roi,dst;

int method;

//模板匹配方法

int maxmethod =6;

//匹配方法最高值

void

matchdemo

(int

,void*)

;int

main()

imshow

("原圖"

, src)

;imshow

("模板"

, roi)

;namedwindow

("模板匹配"

,cv_window_autosize)

;createtrackbar

("匹配演算法型別"

,"模板匹配"

,&method, maxmethod, matchdemo)

;matchdemo(0

,0);

waitkey(0

);return0;

}void

matchdemo

(int

,void*)

else

printf

("\n相關性最小的座標位置 為 x=%d y=%d"

, roiloc.x, roiloc.y)

;printf

("\n相關性最大的座標位置 為 x=%d y=%d"

, roiloc.x, roiloc.y)

;printf

("\n矩形繪製座標起點為 x=%d y=%d"

, roiloc.x, roiloc.y)

;//對找到的位置點 進行幾何形狀矩形繪製

src.

copyto

(dst)

;rectangle

(dst,

rect

(roiloc.x,roiloc.y,roi.cols, roi.rows)

,scalar(0

,0,255),

2,line_aa)

;//在原圖上繪製矩形

rectangle

(result,

rect

(roiloc.x, roiloc.y, roi.cols, roi.rows)

,scalar(0

,0,255),

2, line_aa)

;//在相關性關係圖上繪製矩形

//繪製矩形(目標,矩形(矩形頂點的x座標位置,矩形頂點的y座標位置,矩形寬度,矩形高度),線框顏色,線寬,線型別)

//point是物件型別,它有兩個屬性x, y,分別代表x, y座標 所以我們可以用roiloc.x,roiloc.y確認繪製矩形的左上角的xy座標

imshow

("每乙個位置的相關係數圖"

,result)

;imshow

("模板匹配"

, dst)

;}

基於模板匹配的焊縫識別

//模板匹配案例 交警識別

matchtemplate()引數詳解

函式原型

cv_exports_w void matchtemplate( inputarray image, inputarray templ, outputarray result, int method );

image:待匹配的源影象

templ:模板影象

result:儲存結果的矩陣,我們可以通過minmaxloc() 確定結果矩陣的最大值和最小值的位置.

minmaxloc()函式:查詢全域性最小和最大稀疏陣列元素並返回其值及其位置

void minmaxloc(const sparsemat& a, double* minval,double* maxval, int* minidx=0, int* maxidx=0);

a: 匹配結果矩陣

&minval 和 &maxval: 在矩陣 result 中儲存的最小值和最大值

&minloc 和 &maxloc: 在結果矩陣中最小值和最大值的座標.

method :模板匹配的演算法

有以下六種:

enum ;

tm_sqdiff,tm_sqdiff_normed匹配數值越低表示匹配效果越好,其它四種反之。

tm_sqdiff_normed,tm_ccorr_normed,tm_ccoeff_normed是標準化的匹配,得到的最大值,最小值範圍在0~1之間,其它則需要自己對結果矩陣歸一化。

不同的方法會得到差異很大的結果,可以通過測試選擇最合適的方法。

模板匹配詳解

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

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