OpenCV的模板匹配简单包装
2009-04-12 17:36
375 查看
OpenCV的模板匹配在帧间跟踪目标效果还不错。
PS: CSDN的blog真烂,居然只能发一篇文章,nnd。
PS: CSDN的blog真烂,居然只能发一篇文章,nnd。
#if !defined(AFX_TRACKER_TM_H_INCLUDED) #define AFX_TRACKER_TM_H_INCLUDED #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "cv.h" class CTrackerTM { public: void Process(IplImage *gray) { assert(gray != NULL); if (!m_bInit) { return; } MatchTemplate(gray, m_ImgTemplate, &m_MaxCOE, &m_Pos); }; void Init(IplImage *gray, CvRect roi) { if (m_bInit) { return; } m_ImgTemplate = cvCreateImage(cvSize(roi.width, roi.height), 8, 1); cvSetImageROI(gray, roi); cvCopy(gray, m_ImgTemplate, NULL); cvResetImageROI(gray); m_Pos = cvPoint(roi.x, roi.y); m_Size= cvSize(roi.width, roi.height); m_bInit = true; }; void MatchTemplate(IplImage *gray, IplImage *tmpl, double *M, CvPoint *pt) { double m, scale = 2; IplImage *tmpl2; IplImage* result; CvRect rect; CvPoint point1; int resultW; int resultH; int w = tmpl->width * (float)scale/ 2; int h = tmpl->height* (float)scale/ 2; int x = pt->x + tmpl->width/ 2; int y = pt->y + tmpl->height/2; int x0= max(x - w, 0); int x1= min(x + w, gray->width - 1); int y0= max(y - h, 0); int y1= min(y + h, gray->height - 1); rect.height = y1 - y0; rect.width = x1 - x0; rect.x = x0; rect.y = y0; //copy model cvSetImageROI(gray, rect); tmpl2 = cvCreateImage(cvSize(rect.width, rect.height), 8, 1); cvCopy(gray, tmpl2, NULL); cvResetImageROI(gray); resultW = tmpl2->width - tmpl->width + 1; resultH = tmpl2->height - tmpl->height +1; result = cvCreateImage(cvSize(resultW, resultH), IPL_DEPTH_32F, 1); cvMatchTemplate(tmpl2, tmpl, result, CV_TM_CCOEFF_NORMED); cvMinMaxLoc(result, &m, M, &point1, pt, NULL); pt->x += rect.x; pt->y += rect.y; cvReleaseImage(&tmpl2); cvReleaseImage(&result); } void UpdateTemplate(IplImage *gray, IplImage *tmpl, CvPoint *pt) { CvRect rect; rect.x = pt->x; rect.y = pt->y; rect.height = tmpl->height; rect.width = tmpl->width; cvSetImageROI(gray, rect); cvCopy(gray, tmpl, NULL); cvResetImageROI(gray); }; CTrackerTM() { m_bInit = false; m_ImgTemplate = NULL; }; ~CTrackerTM() { if (m_ImgTemplate != NULL) { cvReleaseImage(&m_ImgTemplate); } } public: CvPoint m_Pos; //左上角 CvSize m_Size; //size double m_MaxCOE;//最大相似系数 bool m_bInit; IplImage *m_ImgTemplate; }; #endif //AFX_TRACKER_TM_H_INCLUDED
相关文章推荐
- opencv输出文字 opencv简单的图像模板匹配代码
- 【opencv学习之三十】简单模板匹配matchTemplate
- opencv中cvMatchTemplate模板匹配
- 【OpenCV3】模板匹配——cv::matchTemplate()详解
- OpenCV matchTemplate模板匹配
- ROS_OpenCV2_MatchTemplate模板匹配
- 模板匹配opencv
- OpenCV实现之模板匹配(Template Matching)
- opencv 模板匹配中的 minMaxLoc
- 模式识别之目标跟踪---最简单的目标跟踪方法--------模板匹配与相关系数法
- python OpenCV学习笔记(二十六):模板匹配
- OpenCV中的模板匹配方法及其应用
- OpenCV 谈opencv的长处与短处:模板匹配,金字塔
- openCV实现模板匹配
- OpenCV2简单的特征匹配
- opencv学习: 模板匹配函数matchTemplate
- opencv——模板匹配
- opencv学习:模板匹配源码解读
- opencv学习(三十八)之图像模板匹配matchTemplate()