opencv模板匹配代码

include

include

using namespace cv;
using namespace std;
int method = TM_SQDIFF;
int Max_method = 5;
Mat src, temp, match_src, dst;
void Match_Demo(int,void*);
int main()
{
src = imread(“match.jpg”);
temp = imread(“temp.jpg”);
namedWindow(“原图”, WINDOW_AUTOSIZE);
namedWindow(“模板图”, WINDOW_AUTOSIZE);
namedWindow(“效果图”, WINDOW_AUTOSIZE);

createTrackbar("方法", "效果图", &method, Max_method, Match_Demo);
Match_Demo(0, 0);

int weith = temp.cols;
int heigh = temp.rows;
printf("weith:%d  heigh:%d\n", weith, heigh);
//imshow("原图", src);
imshow("模板图", temp);
waitKey(0);
return 0;

}
void Match_Demo(int,void*)
{
int weith = src.cols - temp.cols+1;
int heigh = src.rows - temp.rows+1;
Mat result(weith, heigh, CV_32FC1);
matchTemplate(src, temp, result, method);
normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
double minvalue, maxvalue;
Point minLoc, maxLoc;
minMaxLoc(result, &minvalue, &maxvalue, &minLoc, &maxLoc, Mat());
Point matchLoc;
if (method == TM_SQDIFF || method == TM_SQDIFF_NORMED)
{
matchLoc = minLoc;
}
else
{
matchLoc = maxLoc;
}
Mat newsrc;
src.copyTo(newsrc);
rectangle(result, Rect(matchLoc.x, matchLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, LINE_8);
rectangle(newsrc, Rect(matchLoc.x, matchLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, LINE_8);
imshow(“效果图”, result);
imshow(“原图”, newsrc);
}

猜你喜欢

转载自blog.csdn.net/qinshiyang/article/details/81451088