參考文檔:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html#id2
最近一直在做一個logo檢測的項目,檢測logo的有無,接觸到模闆比對。模闆比對雖然精度不高,但選擇恰當的方法,設定合适的門檻值也能起到一定作用。有的時候我們還能用模闆比對來定位。下面對模闆比對進行一個總結。
模闆比對:模闆比對是一項在一幅圖像中尋找與另一幅模闆圖像最比對(相似)部分的技術.
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=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };
TM_SQDIFF,TM_SQDIFF_NORMED比對數值越低表示比對效果越好,其它四種反之。
TM_SQDIFF_NORMED,TM_CCORR_NORMED,TM_CCOEFF_NORMED是标準化的比對,得到的最大值,最小值範圍在0~1之間,其它則需要自己對結果矩陣歸一化。
不同的方法會得到差異很大的結果,可以通過測試選擇最合适的方法。
歸一化函數normalize()
normalize( result, result, , , NORM_MINMAX, -, Mat() );
模闆比對的大緻用法如下:
void templateMatching(const Mat& srcImage,const Mat& templateImage)
{
Mat result;
int result_cols = srcImage.cols - templateImage.cols + ;
int result_rows = srcImage.rows - templateImage.rows + ;
if(result_cols < || result_rows < )
{
qDebug() << "Please input correct image!";
return;
}
result.create(result_cols, result_rows, CV_32FC1);
// enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };
matchTemplate(srcImage,templateImage,result,TM_CCOEFF_NORMED); //最好比對為1,值越小比對越差
double minVal = -;
double maxVal;
Point minLoc;
Point maxLoc;
Point matchLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
//取大值(視比對方法而定)
// matchLoc = minLoc;
matchLoc = maxLoc;
//取大值,值越小表示越比對
QString str = "Similarity:" + QString::number((maxVal) * , 'f', ) + "%";
qDebug(str.toAscii().data());
Mat mask = srcImage.clone();
//繪制最比對的區域
rectangle(mask, matchLoc, Point(matchLoc.x + templateImage.cols, matchLoc.y + templateImage.rows), Scalar(, , ), , , );
imshow("mask",mask);
}
分别采用兩個不同顔色的模闆圖進行測試,得到如下兩組結果圖,以供參考。
測試結果1:

測試結果2:
Atitit opencv模闆比對attilax總結
Atitit opencv模闆比對attilax總結 找一幅圖像的比對的模闆,可以在一段視訊裡尋找出我們感興趣的東西,比如條形碼的識别就可能需要這樣類似的一個工作提取出條形碼區域(當然這樣的方法并不魯 ...
opencv 模闆比對與滑動視窗(單比對) (多比對)
1單比對: 測試圖檔: code: #include #include #include
Scala進階之路-Scala函數篇詳解
Scala進階之路-Scala函數篇詳解 作者:尹正傑 版權聲明:原創作品,謝絕轉載!否則将追究法律責任. 一.傳值調用和傳名調用 /* @author :yinzhengjie Blog:http: ...
Atitit opencv 模闆比對
Atitit opencv 模闆比對 1.1. 圖檔1 1.2. Atitit opencv 模闆比對 6中比對算法貌似效果差別不大1 1.3. 對模闆縮放的影響 一般的縮放可以,太大了就歇菜了.. ...
MySQL UUID函數的詳解(轉)
MySQL UUID函數的詳解 MySQL中可以有二類用于生成唯一值性質的工具:UUID()函數和自增序列,那麼二者有何差別呢?我們就此對比下各自的特性及異同點: l 都可以實作生成唯一值的功能: ...
php正規表達式中preg_match_all函數的詳解
php正規表達式中的函數我們之前為大家結果一個preg_match函數,相信大夥對此有所了解,那麼php正規表達式中preg_match_all函數的具體使用是如何的呢?今天我們就帶大家了解php正則 ...
關于Python正規表達式findall函數問題詳解
關于Python正規表達式 findall函數問題詳解 在寫正規表達式的時候總會遇到不少的問題, 特别是在表達式有多個元組的時候.下面看下re子產品下的findall()函數和多個表達式元組相遇的時候會 ...
高性能JavaScript模闆引擎實作原理詳解
這篇文章主要介紹了JavaScript模闆引擎實作原理詳解,本文着重講解artTemplate模闆的實作原理,它采用預編譯方式讓性能有了質的飛躍,是其它知名模闆引擎的25.32 倍,需要的朋友可以參考 ...
自寫函數VB6 STUFF函數 和 VB.net 2010 STUFF函數 詳解
'*************************************************************************'**模 塊 名:自寫函數VB6 STUFF函數 和 ...
随機推薦
POJ2513——Colored Sticks(Trie樹+歐拉回路+并查集)
Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...
Python Socket,How to Create Socket Server? - 網絡程式設計執行個體
文章出自:Python socket – network programming tutorial by Silver Moon 原創譯文,如有版權問題請聯系删除. Network programin ...
localStorge它storage事件
随着h5患病率和mobile發展.localStorage它不再是一個陌生的詞彙.我相信大多數童鞋進行了聯系,并用它.但storage事件相信有很多童鞋不清晰甚至沒有接觸.今天我們主要談storage ...
backbone中get和fetch的差別
我也是剛開始接觸backbone.js對于裡面的很多東西都看過,但是具體在使用起來還是有很多問題,其中一個就是get和fetch的差別,這個讓我很糾結,都是擷取模型的資料,幹嘛要有兩個呢?最近好像弄明 ...
MiseringThread.java 解析頁面線程
MiseringThread.java 解析頁面線程 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner; imp ...
Python程式設計基礎[函數和面向對象](三)
Python 函數 函數是組織好的,可重複使用的,用來實作單一,或相關聯功能的代碼段. 函數能提高應用的子產品性,和代碼的重複使用率.你已經知道Python提供了許多内建函數,比如print().但你也 ...
05: jQuery
目錄: jQuery參考網站 W3school 1.1 JQuery作用 1.2 jQuery與DOM比較 與 互相轉換 1.3 jQuery選擇器 1.4 jQuery篩選與過濾 1.5 jQuer ...
删除排序數組中的重複數字 II &#183; Remove Duplicates from Sorted Array II
重複一次 [抄題]: 給定一個排序數組,在原數組中删除重複出現的數字,使得每個元素隻出現一次,并且傳回新的數組的長度. 不要使用額外的數組空間,必須在原地沒有額外空間的條件下完成. [思維問題]: [ ...
shutil的一些基本用法
import shutil import time import tarfile # 将檔案内容拷貝到另一個檔案中 shutil.copyfileobj(open('a1', 'r'), open(' ...
網絡文學帶動的IP熱
網絡文學從最初被人诟病不入流到現今直接帶動整個網絡文學産業鍊發展以及IP熱,其發展曆程如何?現今布局如何?以下做簡單概括. 下圖為艾瑞PC指數文學網站排名,由圖可看出晉江原創網排名首位. 晉江隸屬盛大 ...