在該demo中選取了兩張猴哥的**,一張用來獲得模板,另外一張用模板去匹配。
下圖為選取模板的影象:
以下為選取的匹配模板:
根據該模板在下面的圖中找到猴哥的臉:
該demo要實現的功能已經說完。
下面就是實現過程中的一些細節。
首先來說,模板匹配的原理:模板匹配就是兩幅影象,將小的影象像個滑塊一樣在大的上面逐畫素滑動,並且沒滑動一次計算出此次小影象覆蓋下的區域畫素和該滑塊中畫素的差值,當然了這個差值不一定是直接減,也可以是別的計算方法,來衡量畫素之間的差異。最後將所有的衡量結果,取出其中最符合的那個畫素點然後利用滑塊的大小將識別的區域利用圓框進行框選出來。
編寫demo過程中的幾個api和重要的操作:
首先是在一幅大的中得到乙個小的:
rect rect
(左上頂點x,左上頂點y,區域的寬,區域的高)
;mat template
=src
(rect)
;
匹配函式:
matchtemplate
( 要匹配的大影象,
模板影象,
輸出結果影象,
匹配計算的方法cv_tm_sqdiff
(平方差)
);
匹配結束之後我們需要在結果矩陣中找到我們需要的最小或者做大值以及它們的位置,opencv給我們提供了相應的api函式供我們去使用。
minmaxloc
( 輸入矩陣,
&最小值,
&最大值,
&最小值的位置point()
&最大值的位置point()
mat();
);
例如我們使用平方差的方式,我們需要找到矩陣中的最小值,所以我們可以得到poi
nt(x
min,
ymin
)point(x_,y_)
point(
xmin
,ym
in)
然後我們根據該點在影象上圈出最匹配的區域。
#include
"opencv2/opencv.hpp"
#include
using
namespace std;
using
namespace cv;
intmain
(int argc,
char
*ar**)
最後執行的結果,與我們的預期完全一致:
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
模板匹配,就是在一幅影象中尋找另一幅模板影象最匹配 也就是最相似 的部分的技術。說的有點抽象,下面給個例子說明就很明白了。在上面這幅全明星照中,我們想找出姚明頭像的位置,並把它標記出來,可以做到嗎?可以,這就是模板匹配的要做的事情。其實模板匹配實現的思想也是很簡單很暴力的,就是拿著模板 姚明頭像 在...