OpenCV中的matchTemplate()函数用于在图像中搜索模板并进行匹配。它采用了滑动窗口的方式,在输入图像上以不同位置对模板进行匹配,得到相似度矩阵。
函数原型如下:
void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method);
参数解释:
image
:输入图像,数据类型为CV_8U、CV_16U或CV_32F。templ
:待匹配的模板图像,尺寸小于或等于输入图像。result
:输出结果矩阵,用于存储匹配结果。method
:指定匹配方法,有多种可选方法(如TM_SQDIFF、TM_CCORR等)。
示例代码:
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像
cv::Mat templ = cv::imread("template.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty() || templ.empty())
{
std::cout << "Failed to read images!" << std::endl;
return -1;
}
// 创建输出结果矩阵
cv::Mat result;
// 使用 TM_CCORR_NORMED 方法进行模板匹配
cv::matchTemplate(image, templ, result, cv::TM_CCORR_NORMED);
// 寻找最佳匹配位置
double minVal, maxVal;
cv::Point minLoc, maxLoc;
cv::minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
// 绘制矩形框显示匹配结果
cv::rectangle(image, maxLoc, cv::Point(maxLoc.x + templ.cols, maxLoc.y + templ.rows), cv::Scalar(0, 255, 0), 2);
// 显示原始图像和匹配结果
cv::imshow("Original Image", image);
cv::imshow("Matching Result", result);
cv::waitKey(0);
return 0;
}
该示例代码读取一幅灰度图像和一个模板图像,使用TM_CCORR_NORMED
方法进行模板匹配,并在原始图像中标记出最佳匹配位置的矩形框。
内容由零声教学AI助手提供,问题来源于学员提问