用C语言写一个彩色图像模板匹配的代码
时间: 2023-12-03 12:03:49 浏览: 28
以下是一个使用 C 语言实现彩色图像模板匹配的示例代码,需要使用 OpenCV 库:
```c
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat img, templ, result;
img = imread("input_image.jpg");
templ = imread("template_image.jpg");
int result_cols = img.cols - templ.cols + 1;
int result_rows = img.rows - templ.rows + 1;
result.create(result_rows, result_cols, CV_32FC1);
matchTemplate(img, templ, result, TM_CCORR_NORMED);
double minVal, maxVal;
Point minLoc, maxLoc;
Point matchLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
matchLoc = maxLoc;
rectangle(img, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);
imshow("Matched Image", img);
waitKey(0);
return 0;
}
```
在此示例中,我们首先加载原始图像和要匹配的模板图像。然后,我们使用 `matchTemplate` 函数将模板与原始图像进行比较,并计算出匹配结果。接着,我们查找结果图像中的最大值,该值对应于最佳匹配位置。最后,我们在原始图像中标记最佳匹配位置,并显示匹配后的图像。
需要注意的是,此示例仅适用于灰度图像模板匹配。如果要使用彩色图像进行匹配,则需要对代码进行修改,例如使用 `CV_8UC3` 类型的图像,使用 `matchTemplate` 函数的 `TM_CCORR_NORMED` 模式,并分别对红、绿、蓝三个通道进行匹配。