日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv 模板匹配(cvMatchTemplate)

發(fā)布時(shí)間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv 模板匹配(cvMatchTemplate) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

opencv 模板匹配(cvMatchTemplate)???

?????? 模板匹配是通過在輸入圖像上滑動(dòng)模板圖像塊對實(shí)際的圖像塊和輸入圖像進(jìn)行匹配,并且可以利用函數(shù)cvMinMaxLoc()找到最佳匹配的位置。例如在工業(yè)應(yīng)用中,可以鎖定圖像中零部件的位置,并根據(jù)具體的位置,進(jìn)行具體的處理。匹配的過程中可以使用不同的method,通過最合適的method,進(jìn)行最合適的匹配。


MatchTemplate

????? 比較模板和重疊的圖像區(qū)域

void cvMatchTemplate( const CvArr* image,const CvArr* templ, CvArr* result, int method ); image????? 欲搜索的圖像。它應(yīng)該是單通道、8-比特或32-比特 浮點(diǎn)數(shù)圖像templ????? 搜索模板,不能大于輸入圖像,且與輸入圖像具有一樣的數(shù)據(jù)類型result????? 比較結(jié)果的映射圖像。單通道、32-比特浮點(diǎn)數(shù). 如果圖像是 W×H 而 templ 是 w×h ,則 result 一定是 (W-w+1)×(H-h+1).method?? 指定匹配方法:

?????? 函數(shù) cvMatchTemplate 與函數(shù) cvCalcBackProjectPatch 類似。它滑動(dòng)過整個(gè)圖像 image, 用指定方法比較 templ 與圖像尺寸為 w×h 的重疊區(qū)域,并且將比較結(jié)果存到 result 中。 下面是不同的比較方法,可以使用其中的一種 (I 表示圖像,T - 模板, R - 結(jié)果. 模板與圖像重疊區(qū)域 x'=0..w-1, y'=0..h-1 之間求和):


OpenCV模板匹配算法.可用的方法有6個(gè):


平方差匹配method=CV_TM_SQDIFF,這類方法利用平方差來進(jìn)行匹配,最好匹配為0.匹配越差,匹配值越大.

標(biāo)準(zhǔn)平方差匹配method=CV_TM_SQDIFF_NORMED

相關(guān)匹配method=CV_TM_CCORR,這類方法采用模板和圖像間的乘法操作,所以較大的數(shù)表示匹配程度較高,0標(biāo)識(shí)最壞的匹配效果.


標(biāo)準(zhǔn)相關(guān)匹配method=CV_TM_CCORR_NORMED

相關(guān)系數(shù)匹配method=CV_TM_CCOEFF。這類方法將模版對其均值的相對值與圖像對其均值的相關(guān)值進(jìn)行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關(guān)性(隨機(jī)序列).

在這里

標(biāo)準(zhǔn)相關(guān)系數(shù)匹配method=CV_TM_CCOEFF_NORMED





???? 通常,隨著從簡單的測量(平方差)到更復(fù)雜的測量(相關(guān)系數(shù)),我們可獲得越來越準(zhǔn)確的匹配(同時(shí)也意味著越來越大的計(jì)算代價(jià)).最好的辦法是對所有這些設(shè)置多做一些測試實(shí)驗(yàn),以便為自己的應(yīng)用選擇同時(shí)兼顧速度和精度的最佳方案.

?????? 通過使用 cvMinMaxLoc函數(shù),我們確定結(jié)果矩陣 R 的最大值和最小值的位置。函數(shù)中的參數(shù)有:

double minVal; double maxVal; Point minLoc; Point maxLoc; Point matchLoc; minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );??? result: 匹配結(jié)果矩陣
??? &minVal 和 &maxVal: 在矩陣 result 中存儲(chǔ)的最小值和最大值。該值是矩陣中的最大值和最小值。
??? &minLoc 和 &maxLoc: 在結(jié)果矩陣中最小值和最大值的坐標(biāo).
??? Mat(): 可選的掩模



代碼如下(輸出待尋找模板的位置坐標(biāo),以及相似度值):

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <string>using namespace cv; using namespace std;#include "cv.h" #include "highgui.h"#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <math.h> #include <float.h> #include <limits.h> #include <time.h> #include <ctype.h>int main(int argc, char** argv){IplImage *src, *temp1, *ftmp;//讀入模板圖像 temp1 = cvLoadImage(argv[1], 1);//讀入源圖像 src = cvLoadImage(argv[2], 1);int iwidth = src->width - temp1->width + 1;int iheight = src->height - temp1->height + 1;ftmp = cvCreateImage(cvSize(iwidth, iheight), 32, 1);double min_val;double max_val;CvPoint min_loc;CvPoint max_loc;cvMatchTemplate(src, temp1, ftmp, CV_TM_SQDIFF);cvMinMaxLoc(ftmp, &min_val, &max_val, &min_loc, &max_loc, NULL);cvRectangle(src, cvPoint(min_loc.x, min_loc.y), cvPoint((min_loc.x + temp1->width), (min_loc.y + temp1->height)), CV_RGB(0, 255, 0), 1);cvNamedWindow("src", 1);cvShowImage("src", src);printf("x_location=%d;y_location=%d", min_loc.x, min_loc.y);printf("min_val=%d;max_val=%d", min_val, max_val);cvWaitKey(0);return 0; }


待搜尋的圖:




創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

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