菜鳥一枚,
這是我的第六個博客,
剛剛入門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);
}
程序運行結果:
謝謝大家的閱讀!!!