OpenCV 4.13.0
開源電腦視覺 (Open Source Computer Vision)
載入中...
搜尋中...
無符合項
物件檢測

詳細描述

列舉

列舉  cv::TemplateMatchModes {
  cv::TM_SQDIFF = 0 ,
  cv::TM_SQDIFF_NORMED = 1 ,
  cv::TM_CCORR = 2 ,
  cv::TM_CCORR_NORMED = 3 ,
  cv::TM_CCOEFF = 4 ,
  cv::TM_CCOEFF_NORMED = 5
}
 模板匹配操作的類型 更多...
 

函式

void cv::matchTemplate (InputArray image, InputArray templ, OutputArray result, int method, InputArray mask=noArray())
 將模板與重疊的影像區域進行比較。
 

列舉類型文件

◆ TemplateMatchModes

#include <opencv2/imgproc.hpp>

模板匹配操作的類型

列舉值
TM_SQDIFF 
Python: cv.TM_SQDIFF

\[R(x,y)= \sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2\]

帶遮罩 (mask)

\[R(x,y)= \sum _{x',y'} \left( (T(x',y')-I(x+x',y+y')) \cdot M(x',y') \right)^2\]

TM_SQDIFF_NORMED 
Python: cv.TM_SQDIFF_NORMED

\[R(x,y)= \frac{\sum_{x',y'} (T(x',y')-I(x+x',y+y'))^2}{\sqrt{\sum_{ x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}\]

帶遮罩 (mask)

\[R(x,y)= \frac{\sum _{x',y'} \left( (T(x',y')-I(x+x',y+y')) \cdot M(x',y') \right)^2}{\sqrt{\sum_{x',y'} \left( T(x',y') \cdot M(x',y') \right)^2 \cdot \sum_{x',y'} \left( I(x+x',y+y') \cdot M(x',y') \right)^2}}\]

TM_CCORR 
Python: cv.TM_CCORR

\[R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y'))\]

帶遮罩 (mask)

\[R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y') \cdot M(x',y') ^2)\]

TM_CCORR_NORMED 
Python: cv.TM_CCORR_NORMED

\[R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I(x+x',y+y'))}{\sqrt{ \sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}\]

帶遮罩 (mask)

\[R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I(x+x',y+y') \cdot M(x',y')^2)}{\sqrt{\sum_{x',y'} \left( T(x',y') \cdot M(x',y') \right)^2 \cdot \sum_{x',y'} \left( I(x+x',y+y') \cdot M(x',y') \right)^2}}\]

TM_CCOEFF 
Python: cv.TM_CCOEFF

\[R(x,y)= \sum _{x',y'} (T'(x',y') \cdot I'(x+x',y+y'))\]

其中

\[\begin{array}{l} T'(x',y')=T(x',y') - 1/(w \cdot h) \cdot \sum _{ x'',y''} T(x'',y'') \\ I'(x+x',y+y')=I(x+x',y+y') - 1/(w \cdot h) \cdot \sum _{x'',y''} I(x+x'',y+y'') \end{array}\]

帶遮罩 (mask)

\[\begin{array}{l} T'(x',y')=M(x',y') \cdot \left( T(x',y') - \frac{1}{\sum _{x'',y''} M(x'',y'')} \cdot \sum _{x'',y''} (T(x'',y'') \cdot M(x'',y'')) \right) \\ I'(x+x',y+y')=M(x',y') \cdot \left( I(x+x',y+y') - \frac{1}{\sum _{x'',y''} M(x'',y'')} \cdot \sum _{x'',y''} (I(x+x'',y+y'') \cdot M(x'',y'')) \right) \end{array} \]

TM_CCOEFF_NORMED 
Python: cv.TM_CCOEFF_NORMED

\[R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y')^2 \cdot \sum_{x',y'} I'(x+x',y+y')^2} }\]

函式文件

◆ matchTemplate()

void cv::matchTemplate ( InputArray image,
InputArray templ,
OutputArray result,
int method,
InputArray mask = noArray() )
Python
cv.matchTemplate(image, templ, method[, result[, mask]]) -> result

#include <opencv2/imgproc.hpp>

將模板與重疊的影像區域進行比較。

此函數在圖像 (image) 上滑動,使用指定的方法將大小為 \(w \times h\) 的重疊區塊與模板 (templ) 進行比較,並將比較結果儲存於 result 中。TemplateMatchModes 描述了可用比較方法的公式(\(I\) 表示圖像,\(T\) 表示模板,\(R\) 表示結果,\(M\) 表示可選的遮罩)。求和計算是針對模板和/或圖像區塊進行的:\(x' = 0...w-1, y' = 0...h-1\)

函數完成比較後,可以使用 minMaxLoc 函數找到最佳匹配,結果為全域最小值(當使用 TM_SQDIFF 時)或最大值(當使用 TM_CCORRTM_CCOEFF 時)。對於彩色圖像,分子中的模板求和與分母中的每個求和都是針對所有通道進行的,且每個通道使用單獨的平均值。也就是說,該函數可以接受彩色模板和彩色圖像。最終結果仍將是一張單通道圖像,便於分析。

參數
image執行搜尋的圖像。必須是 8 位元或 32 位元浮點型。
templ要搜尋的模板。必須不大於來源圖像,且具有相同的資料類型。
result比較結果的映射圖。必須是單通道 32 位元浮點型。如果圖像為 \(W \times H\),模板為 \(w \times h\),則結果為 \((W-w+1) \times (H-h+1)\)。
method指定比較方法的參數,請參見 TemplateMatchModes
遮罩 (mask)可選遮罩。必須與模板大小相同。它必須與模板具有相同數量的通道,或者僅有一個通道(該通道將用於所有模板和圖像通道)。如果資料類型為 CV_8U,則該遮罩被解釋為二進位遮罩,表示僅使用遮罩中非零的元素,且這些元素保持不變,與實際遮罩值無關(權重等於 1)。對於 CV_32F 類型的資料,遮罩值被用作權重。具體公式記錄在 TemplateMatchModes 中。