OpenCV中模板匹配
时间: 2023-09-12 12:10:56 浏览: 180
OpenCV实现图像模板匹配(C++实现).zip
OpenCV中的模板匹配是一种基于像素级别的图像匹配方法,它可以在一幅图像中寻找与给定模板最相似的部分。模板匹配在计算机视觉领域中有广泛的应用,例如目标检测、图像识别等。
OpenCV中的模板匹配函数为cv::matchTemplate(),它的原型如下:
```
void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method);
```
其中,image为输入图像,templ为模板图像,result为输出的匹配结果,method为匹配方法,包括以下几种:
- CV_TM_SQDIFF:平方差匹配法
- CV_TM_SQDIFF_NORMED:归一化平方差匹配法
- CV_TM_CCORR:相关匹配法
- CV_TM_CCORR_NORMED:归一化相关匹配法
- CV_TM_CCOEFF:系数匹配法
- CV_TM_CCOEFF_NORMED:归一化系数匹配法
在匹配过程中,首先将模板与输入图像的每一个像素位置进行比较,得到一个匹配值。然后,从这些匹配值中选择最大值或最小值,即为匹配结果。最终结果是一个灰度图像,其中匹配值最大(或最小)的像素位置表示模板在输入图像中的位置。
下面是一个简单的示例代码,用于在一副图像中寻找一个小图像的位置:
```cpp
Mat img = imread("input.jpg");
Mat templ = imread("template.jpg");
Mat result;
matchTemplate(img, templ, result, CV_TM_CCOEFF_NORMED);
double minVal, maxVal;
Point minLoc, maxLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
// 在原图上绘制出匹配的矩形
rectangle(img, maxLoc, Point(maxLoc.x + templ.cols, maxLoc.y + templ.rows), Scalar(0, 0, 255), 2);
imshow("Result", img);
waitKey(0);
```
这段代码中,首先读入输入图像和模板图像,然后调用matchTemplate()函数进行匹配。最后,使用minMaxLoc()函数找到匹配值最大的像素位置,将其作为矩形的左上角,在原图上绘制出匹配的矩形。
阅读全文