菜鸟一枚,
这是我的第六个博客,
刚刚入门opencv,
想将自己的学习过程分享给大家!!!
代码:
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp> //Opencv highgui 模块
#include <opencv2/imgproc/imgproc.hpp> //Opencv 图像处理头文件
using namespace cv;
#define WINDOW_NAME1 "原始图片"
#define WINDOW_NAME2 "效果窗口"
Mat src;
Mat result;
Mat temp;
int numethod;
void matching(int, void*);
int main()
{
src = imread("D:/opencv/opencvSRC/动物合集.jpg"); //载入待检测图
temp = imread("D:/opencv/opencvSRC/动物合集之一.jpg"); //载入模板图
namedWindow(WINDOW_NAME1, CV_WINDOW_AUTOSIZE);
namedWindow(WINDOW_NAME2, CV_WINDOW_AUTOSIZE);
imshow("模板",temp);
createTrackbar("方法", WINDOW_NAME1, &numethod, 5, matching); //创建方法滑动条
matching(0, 0);
waitKey(0);
return 0;
}
void matching(int,void*)
{
Mat dst;
src.copyTo(dst);
int width = src.cols - temp.cols + 1;
int height= src.rows - temp.rows + 1;
Mat result(height, width, CV_32FC1); //规定结果必须是这种形式
matchTemplate(src, temp, result, numethod); //进行模板匹配
normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat()); //结果需要进行归一化
Point minloc;
Point maxloc;
double max;
double min;
Point matchloc;
minMaxLoc(result, &min, &max, &minloc, &maxloc, Mat()); //定位最佳匹配位置
//对于方法SQDIFF和SQDIFF_NORMED,越小数值有着越高的匹配结果,而其余方法,数值越大有着更高的匹配结果
if (numethod == TM_SQDIFF || numethod == TM_SQDIFF_NORMED)
{
matchloc = minloc;
}
else
{
matchloc = maxloc;
}
rectangle(dst, Rect(matchloc.x,matchloc.y, temp.cols,temp.rows), Scalar(0, 0, 255), 2, 8);
rectangle(result, Rect(matchloc.x, matchloc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);
imshow(WINDOW_NAME1, dst);
imshow(WINDOW_NAME2, result);
}
程序运行结果:
谢谢大家的阅读!!!