opencv模板匹配实例代码 c++
时间: 2024-11-06 19:12:12 浏览: 20
opencv模板匹配.rar
OpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉库,可以用于模板匹配等图像处理任务。模板匹配通常涉及在一个大图像(也称作搜索图像)中寻找一个小图像(模板)的相似位置。下面是一个简单的C++ OpenCV模板匹配的例子:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取模板图片
cv::Mat template_img = cv::imread("template.jpg", cv::IMREAD_GRAYSCALE);
if (template_img.empty()) {
std::cout << "无法加载模板图像" << std::endl;
return -1;
}
// 读取搜索图像
cv::Mat search_img = cv::imread("search_image.jpg", cv::IMREAD_GRAYSCALE);
if (search_img.empty()) {
std::cout << "无法加载搜索图像" << std::endl;
return -1;
}
// 对模板图像进行归一化
cv::normalize(template_img, template_img, 0, 255, cv::NORM_MINMAX);
// 使用模板匹配函数
std::vector<cv::Point> matched_points;
cv::matchTemplate(search_img, template_img, matched_points, cv::TM_CCOEFF_NORMED);
// 找到最佳匹配的位置
int min_val, max_val, min_loc, max_loc;
cv::minMaxLoc(matched_points, &min_val, &max_val, &min_loc, &max_loc);
// 绘制矩形标记匹配区域
cv::rectangle(search_img, max_loc, cv::Size(template_img.cols, template_img.rows), cv::Scalar(0, 0, 255), 2);
// 显示结果
cv::imshow("Match Result", search_img);
cv::waitKey();
return 0;
}
```
在这个例子中,`cv::matchTemplate()` 函数用于查找模板在搜索图像中的匹配,然后通过 `cv::minMaxLoc()` 寻找最大值对应的位置。注意,这只是一个基本示例,实际应用可能需要调整阈值、进行非极大值抑制(Non-Maximum Suppression)等因素。
阅读全文