c++OpenCV实现边缘模板匹配算法完整算法
时间: 2023-10-12 22:36:29 浏览: 101
下面是使用C++和OpenCV库实现边缘模板匹配算法的完整代码,注释中有详细的说明:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 加载原始图像和模板图像
Mat img = imread("image.jpg");
Mat temp = imread("template.jpg");
// 将模板图像转换为灰度图像
Mat temp_gray;
cvtColor(temp, temp_gray, COLOR_BGR2GRAY);
// 使用Canny边缘检测算法检测模板图像的边缘
Mat edges;
Canny(temp_gray, edges, 50, 200);
// 在原始图像中搜索与模板图像匹配的边缘
Mat result;
matchTemplate(img, edges, result, TM_CCOEFF_NORMED);
// 使用阈值来确定匹配结果的位置
double threshold = 0.8;
Mat locations;
findNonZero(result > threshold, locations);
// 在原始图像中绘制矩形框来标记匹配的位置
for (int i = 0; i < locations.total(); i++)
{
Point loc = locations.at<Point>(i);
rectangle(img, loc, Point(loc.x + temp.cols, loc.y + temp.rows), Scalar(0, 0, 255), 2);
}
// 显示结果
namedWindow("Result", WINDOW_NORMAL);
imshow("Result", img);
waitKey(0);
destroyAllWindows();
return 0;
}
```
需要注意的是,这段代码使用了C++11的`findNonZero`函数来获取匹配结果的位置,因此需要开启C++11支持。可以在编译指令中添加`-std=c++11`选项来开启C++11支持。例如,在Linux系统下可以使用以下命令编译代码:
```
g++ -std=c++11 main.cpp -o main `pkg-config --cflags --libs opencv4`
```