OpenCV  4.10.0
开源计算机视觉库
正在加载...
正在搜索...
无匹配项
枚举 | 函数
目标检测

详细描述

枚举

枚举  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\]

带掩码

\[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}}\]

带掩码

\[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'))\]

带掩码

\[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}}\]

带掩码

\[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}\]

带掩码

\[\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>

将模板与重叠的图像区域进行比较。

该函数在图像中滑动,使用指定的 method 将大小为 \(w \times h\) 的重叠块与模板进行比较,并将比较结果存储在 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 中有说明。