opencv 模板匹配(cvMatchTemplate)
opencv 模板匹配(cvMatchTemplate)???
?????? 模板匹配是通過在輸入圖像上滑動(dòng)模板圖像塊對實(shí)際的圖像塊和輸入圖像進(jìn)行匹配,并且可以利用函數(shù)cvMinMaxLoc()找到最佳匹配的位置。例如在工業(yè)應(yīng)用中,可以鎖定圖像中零部件的位置,并根據(jù)具體的位置,進(jìn)行具體的處理。匹配的過程中可以使用不同的method,通過最合適的method,進(jìn)行最合適的匹配。
MatchTemplate
????? 比較模板和重疊的圖像區(qū)域
?????? 函數(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ù)有:
??? &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; }
待搜尋的圖:
總結(jié)
以上是生活随笔為你收集整理的opencv 模板匹配(cvMatchTemplate)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云自带的mysql_阿里云自带mys
- 下一篇: R plot图片背景设置为透明_R语言(