c++matchTemplate函数
时间: 2023-11-29 10:05:19 浏览: 75
在C++中,`matchTemplate()`函数是一个图像处理函数,它用于在一张图像中搜索另一张图像的匹配位置。该函数使用模板图像和源图像,通过比较它们的像素值来计算它们之间的相似性。它返回一个结果矩阵,其中每个像素都表示源图像与模板图像在该位置的匹配程度。匹配程度越高,该像素的值就越大。
该函数的语法如下:
```c++
void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method, InputArray mask = noArray());
```
其中,参数含义如下:
- `image`:源图像。
- `templ`:模板图像。
- `result`:结果矩阵,用于存储源图像与模板图像的匹配程度。
- `method`:匹配算法,可选值有:`TM_SQDIFF`、`TM_SQDIFF_NORMED`、`TM_CCORR`、`TM_CCORR_NORMED`、`TM_CCOEFF`、`TM_CCOEFF_NORMED`。
- `mask`:掩模,用于指定源图像中匹配的区域。如果不需要使用掩模,可以将其设置为`noArray()`。
例如,下面的代码演示了如何使用`matchTemplate()`函数在一张图像中搜索另一张图像的匹配位置:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读入源图像和模板图像
Mat srcImage = imread("src.png");
Mat tplImage = imread("tpl.png");
// 创建结果矩阵
Mat resultImage;
int resultCols = srcImage.cols - tplImage.cols + 1;
int resultRows = srcImage.rows - tplImage.rows + 1;
resultImage.create(resultRows, resultCols, CV_32FC1);
// 匹配算法
matchTemplate(srcImage, tplImage, resultImage, TM_CCOEFF_NORMED);
// 查找最优匹配位置
Point maxLoc;
minMaxLoc(resultImage, NULL, NULL, NULL, &maxLoc);
// 在源图像中绘制匹配位置
rectangle(srcImage, maxLoc, Point(maxLoc.x + tplImage.cols, maxLoc.y + tplImage.rows), Scalar(0, 0, 255), 2);
// 显示结果
imshow("srcImage", srcImage);
waitKey(0);
return 0;
}
```
在上述代码中,我们首先使用`imread()`函数读入源图像和模板图像,然后创建一个结果矩阵,用于存储源图像与模板图像的匹配程度。接着,我们使用`matchTemplate()`函数进行匹配,并指定使用`TM_CCOEFF_NORMED`算法。最后,我们查找结果矩阵中的最优匹配位置,并在源图像中绘制匹配矩形。
阅读全文