模板匹配

来源:互联网 发布:数控铣削编程实例简单 编辑:程序博客网 时间:2024/06/05 23:51

首先选取原图中的一个小区域,设为ROI,然后使用cvMatchTemplate()函数找到原图中ROI的位置

#include "opencv2/core/core.hpp"  
#include<cv.h>
#include<highgui.h>
using namespace cv;
using namespace std;
CvPoint pt1 = Point(0, 0);
CvPoint pt2 = Point(0, 0);
bool is_selecting = false;
//读取鼠标位置的函数;
void cvMouseCallback(int mouseEvent, int x, int y, int flags, void* param)
{
switch (mouseEvent)
{
case CV_EVENT_LBUTTONDOWN:
pt1 = Point(x, y);
pt2 = Point(x, y);
is_selecting = true;
break;
case CV_EVENT_MOUSEMOVE:
if (is_selecting)
pt2 = Point(x, y);
break;
case CV_EVENT_LBUTTONUP:
pt2 = Point(x, y);
is_selecting = false;
break;
}
}

int main()
{
IplImage* img = cvLoadImage("photo.jpg");//原图
//鼠标在原图上移动,形成无数个瞬时ROI的图像
IplImage* img_show = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
IplImage* roi;//存放ROI
cvNamedWindow("img");
setMouseCallback("img", cvMouseCallback);
//鼠标选定ROI,保存ROI,按Esc停止选定
while (true)
{
cvCopy(img, img_show);
cvRectangle(img_show, pt1, pt2, Scalar(0, 255, 0));
cvShowImage("img", img_show);
char key = cvWaitKey(10);
cvSetImageROI(img_show, cvRect(pt1.x, pt1.y, abs(pt2.x - pt1.x), abs(pt2.y - pt1.y)));
roi = cvCreateImage(cvSize(abs(pt2.x - pt1.x), abs(pt2.y - pt1.y)), IPL_DEPTH_8U, 3);
cvCopy(img_show, roi);
cvResetImageROI(img_show);
cvSaveImage("ROI.jpg", roi);
if (key == 27) break;
}
//模板标定,选出原图中与ROI最匹配的矩形框
int x = img->width - roi->width + 1; int y = img->height - roi->height + 1;
IplImage *result = cvCreateImage(cvSize(x, y), 32, 1);//存放匹配结果
double min_val;
double max_val;
CvPoint min_loc;
CvPoint max_loc;
cvMatchTemplate(img, roi, result, 0);
//找到最匹配位置
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc, NULL);
cvRectangle(img, cvPoint(min_loc.x, min_loc.y), cvPoint((min_loc.x + roi->width), (min_loc.y + roi->height)), CV_RGB(0, 255, 0), 1);
cvNamedWindow("result"); cvShowImage("result", img);
cvSaveImage("result.jpg", img);
cvWaitKey(0);
return 0;
}

原图                                                                                                                  ROI

                 

模板匹配结果


0 0
原创粉丝点击