C++用OpenCV实现边缘模板匹配算法
时间: 2023-10-23 13:09:48 浏览: 93
下面是使用C++和OpenCV实现边缘模板匹配算法的代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 加载原始图像和模板图像
Mat img = imread("image.jpg", IMREAD_GRAYSCALE);
Mat templateImg = imread("template.jpg", IMREAD_GRAYSCALE);
// 使用Sobel算子进行边缘检测
Mat sobelX, sobelY;
Sobel(img, sobelX, CV_64F, 1, 0, 3);
Sobel(img, sobelY, CV_64F, 0, 1, 3);
Mat sobel = sobelX + sobelY;
// 使用matchTemplate函数进行匹配
Mat result;
matchTemplate(sobel, templateImg, result, TM_CCORR_NORMED);
// 找到匹配的位置
double minVal, maxVal;
Point minLoc, maxLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
// 绘制矩形框
rectangle(img, maxLoc, Point(maxLoc.x + templateImg.cols, maxLoc.y + templateImg.rows), Scalar(255, 0, 0), 2);
// 显示结果
imshow("image", img);
waitKey(0);
destroyAllWindows();
return 0;
}
```
其中,Sobel函数用于进行边缘检测,matchTemplate函数用于进行模板匹配,minMaxLoc函数用于找到匹配的位置,rectangle函数用于绘制矩形框。在实现中,我们使用了CCORR_NORMED方法进行匹配。