程序
#include “stdafx.h”
//本节讲述 画线、点、矩形、圆形和椭圆.多边形,文本。 等函数;
#include <opencv2/opencv.hpp>
#include
using namespace std;
using namespace cv;
int match_method = CV_TM_SQDIFF;
int max_track = 5;
void Match_Demo(int, void*);
//Mat bgImage;
//const char *drawdemo_win = “draw shapes and text demo”;
Mat addSaltNoise(const Mat srcImage, int n);
VideoCapture capture(0);
Mat vidio, gray_src,dst, dst4, dst5, frame,temp;
int main(int argc, char**argv)
{
//Mat src, dst;
temp = imread("C:/Users/Rubison.DELL/Desktop\\杂物/壁纸/帅哥.jpg"); //存放自己图像的路径
if (!temp.data)
{
printf("could not load image...\r\n");
return -1;
}
imshow("特征", temp);
while (1)
{
capture >> frame;
imshow("原图", frame);
cvtColor(frame, vidio, CV_BGR2GRAY);
const char*trackbar_title = "Match Alog Type ";
createTrackbar(trackbar_title, "原图", &match_method, max_track, Match_Demo);
Match_Demo(0, 0);
waitKey(30);
}
waitKey(0);
return 0;
}
void Match_Demo(int, void*)
{
int width = frame.cols - frame.cols + 1; //模板的宽和高
int height = frame.rows - frame.rows + 1;
Mat result(width, height, CV_32FC1);
matchTemplate(frame, temp, result, match_method);
normalize(result, result, 0, 1, NORM_MINMAX);
//找出匹配位置
Point minLoc;
Point maxLoc;
Point temLoc;
double max, min;
frame.copyTo(dst);
minMaxLoc(result, &min, &max, &minLoc, &maxLoc); //在矩阵中需找全局的最大最小数。
if (match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED)
{
temLoc = minLoc;
}
//几种不同的匹配方法,结果不同,利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.
else
{
temLoc = maxLoc;
}
rectangle(dst, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 2555, 0), 2, 8);
rectangle(result, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 2555, 0), 2, 8);
imshow("结果", result);
imshow("匹配", dst);
}
运行结果
特征图:
怎么会这样???