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