日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

OpenCV中的模板匹配

發(fā)布時間:2025/3/15 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV中的模板匹配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OpenCV中的模板匹配

在該demo中選取了兩張猴哥的照片,一張用來獲得模板,另外一張用模板去匹配。
下圖為選取模板的圖像:

以下為選取的匹配模板:

根據(jù)該模板在下面的圖中找到猴哥的臉:

該demo要實現(xiàn)的功能已經(jīng)說完。
下面就是實現(xiàn)過程中的一些細(xì)節(jié)。
首先來說,模板匹配的原理:模板匹配就是兩幅圖像,將小的圖像像個滑塊一樣在大的上面逐像素滑動,并且沒滑動一次計算出此次小圖像覆蓋下的區(qū)域像素和該滑塊中像素的差值,當(dāng)然了這個差值不一定是直接減,也可以是別的計算方法,來衡量像素之間的差異。最后將所有的衡量結(jié)果,取出其中最符合的那個像素點然后利用滑塊的大小將識別的區(qū)域利用圓框進(jìn)行框選出來。
編寫demo過程中的幾個API和重要的操作:
首先是在一幅大的圖片中得到一個小的圖片:

Rect rect(左上頂點x,左上頂點y,區(qū)域的寬,區(qū)域的高); Mat template = src(rect);

匹配函數(shù):

matchTemplate(要匹配的大圖像,模板圖像,輸出結(jié)果圖像,匹配計算的方法CV_TM_SQDIFF(平方差));

匹配結(jié)束之后我們需要在結(jié)果矩陣中找到我們需要的最小或者做大值以及它們的位置,OpenCV給我們提供了相應(yīng)的API函數(shù)供我們?nèi)ナ褂谩?/p> minMaxLoc(輸入矩陣,&最小值,&最大值,&最小值的位置Point()&最大值的位置Point()Mat(); );

例如我們使用平方差的方式,我們需要找到矩陣中的最小值,所以我們可以得到Point(xmin,ymin)Point(x_{min},y_{min})Point(xmin?ymin?)然后我們根據(jù)該點在圖像上圈出最匹配的區(qū)域。

#include "opencv2/opencv.hpp" #include <vector>using namespace std; using namespace cv;int main(int argc, char *argv[]) {Mat src,src1,dst,temp;src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/src1.png");src1 = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/src2.png");imshow("src",src);imwrite("t1.png",src(Rect(0,0,src.cols/2,src.rows)));Rect rect(250,250,200,200);temp = src(rect); imshow("template",temp);matchTemplate(src1,temp,dst,CV_TM_SQDIFF);normalize(dst,dst,0,1,NORM_MINMAX,-1,Mat());double minVal,maxVal;Point minLoc,maxLoc;Point matchLoc;minMaxLoc(dst,&minVal,&maxVal,&minLoc,&maxLoc,Mat());matchLoc = minLoc;rectangle(src1,matchLoc,Point(matchLoc.x + temp.cols,matchLoc.y + temp.rows),Scalar(0,0,255),2,8);imshow("BackProj",src1);waitKey(0);return 0; }

最后執(zhí)行的結(jié)果,與我們的預(yù)期完全一致:

總結(jié)

以上是生活随笔為你收集整理的OpenCV中的模板匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。