opencv多模板匹配c++
时间: 2023-10-11 20:05:20 浏览: 112
opencv多模板匹配
4星 · 用户满意度95%
多模板匹配是一种在图像中查找多个模板的方法。在OpenCV中,可以使用函数`matchTemplate`来实现多模板匹配。该函数与单模板匹配的函数类似,只是需要将多个模板传入作为参数。
以下是使用OpenCV进行多模板匹配的示例代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("src.png"); // 待搜索图像
Mat temp1 = imread("temp1.png"); // 第一个模板图像
Mat temp2 = imread("temp2.png"); // 第二个模板图像
Mat dst = src.clone(); // 原图的克隆图像
// 创建一个结果图像
Mat result1, result2;
// 多模板匹配
matchTemplate(src, temp1, result1, TM_CCORR_NORMED);
matchTemplate(src, temp2, result2, TM_CCORR_NORMED);
// 归一化结果图像
normalize(result1, result1, 0, 1, NORM_MINMAX, -1);
normalize(result2, result2, 0, 1, NORM_MINMAX, -1);
// 设置阈值
double threshold = 0.8;
// 标记匹配位置并画出矩形框
for (int i = 0; i < result1.rows; i++)
{
for (int j = 0; j < result1.cols; j++)
{
if (result1.at<float>(i, j) >= threshold)
{
rectangle(dst, Point(j, i), Point(j + temp1.cols, i + temp1.rows), Scalar(0, 255, 0), 2, 8);
}
}
}
for (int i = 0; i < result2.rows; i++)
{
for (int j = 0; j < result2.cols; j++)
{
if (result2.at<float>(i, j) >= threshold)
{
rectangle(dst, Point(j, i), Point(j + temp2.cols, i + temp2.rows), Scalar(0, 255, 0), 2, 8);
}
}
}
// 显示结果图像
imshow("dst", dst);
waitKey(0);
return 0;
}
```
阅读全文