camshift 实现自动化跟踪的小技巧
2014-05-08 15:18
253 查看
camshift 实现自动化跟踪的小技巧
转载自:http://blog.csdn.net/hardvb/article/details/1226251
opencv 提供了使用基于颜色的跟踪算法camshift, 很好的算法,可是它是个半自动的算法,它需要用户在跟踪界面设定跟踪的目标。怎么预先设定目标再来跟踪呢?
本人偷了个懒,加入了用一张图片来设定跟踪的目标,在启动中加载图片,生成跟踪需要的histogram。这样实现了自动化的跟踪吧。
步骤如下:
1. 找到你需要跟踪的物体,拿到摄像头前,照一张相(print screen),这里需要注意的是,由于光线变化,临近摄像头会亮一些,离远会暗一些,那么最好跟踪的物体的拍摄颜色与实际跟踪中颜色相近。
2. 打开画笔功能,新建一张图片(320*240),大小与视频源图像一致,把物体截取放大,这样跟踪的颜色区域就都在图像中了。
例如这是一个跟踪绿色物体的图片
3。在代码中加入
void loadTemplateImage()
{
IplImage *tempimage = cvLoadImage("F:/OM_tracking/Test cam shift/ShadowTrack/Debug/green.bmp",1);
cvCvtColor( tempimage, hsv, CV_BGR2HSV );
int _vmin = vmin, _vmax = vmax;
cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),
cvScalar(180,256,MAX(_vmin,_vmax),0), mask );
cvSplit( hsv, hue, 0, 0, 0 );
selection.x = 1;
selection.y = 1;
selection.width = 320-1;
selection.height= 240-1;
cvSetImageROI( hue, selection );
cvSetImageROI( mask, selection );
cvCalcHist( &hue, hist, 0, mask );
float max_val = 0.f;
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 );
cvResetImageROI( hue );
cvResetImageROI( mask );
track_window = selection;
track_object = 1;
cvReleaseImage(&tempimage);
}
4,去掉原来的生成Hist的代码。在启动时候加入loadTemplateImage
5.运行代码,看结果吧. 代码这里下载
转载自:http://blog.csdn.net/hardvb/article/details/1226251
opencv 提供了使用基于颜色的跟踪算法camshift, 很好的算法,可是它是个半自动的算法,它需要用户在跟踪界面设定跟踪的目标。怎么预先设定目标再来跟踪呢?
本人偷了个懒,加入了用一张图片来设定跟踪的目标,在启动中加载图片,生成跟踪需要的histogram。这样实现了自动化的跟踪吧。
步骤如下:
1. 找到你需要跟踪的物体,拿到摄像头前,照一张相(print screen),这里需要注意的是,由于光线变化,临近摄像头会亮一些,离远会暗一些,那么最好跟踪的物体的拍摄颜色与实际跟踪中颜色相近。
2. 打开画笔功能,新建一张图片(320*240),大小与视频源图像一致,把物体截取放大,这样跟踪的颜色区域就都在图像中了。
例如这是一个跟踪绿色物体的图片
3。在代码中加入
void loadTemplateImage()
{
IplImage *tempimage = cvLoadImage("F:/OM_tracking/Test cam shift/ShadowTrack/Debug/green.bmp",1);
cvCvtColor( tempimage, hsv, CV_BGR2HSV );
int _vmin = vmin, _vmax = vmax;
cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),
cvScalar(180,256,MAX(_vmin,_vmax),0), mask );
cvSplit( hsv, hue, 0, 0, 0 );
selection.x = 1;
selection.y = 1;
selection.width = 320-1;
selection.height= 240-1;
cvSetImageROI( hue, selection );
cvSetImageROI( mask, selection );
cvCalcHist( &hue, hist, 0, mask );
float max_val = 0.f;
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 );
cvResetImageROI( hue );
cvResetImageROI( mask );
track_window = selection;
track_object = 1;
cvReleaseImage(&tempimage);
}
4,去掉原来的生成Hist的代码。在启动时候加入loadTemplateImage
5.运行代码,看结果吧. 代码这里下载
相关文章推荐
- 从输入 URL 到页面加载完的过程中都发生了什么事情?
- 快速制作圆角图片
- DataSource 接口 简单池实现
- NPOI 2.0 读取、编辑、保存Excel文件
- java数据类型
- Log4j的用法详解
- 调试常用的方法
- jQuery中ajax的使用和缓存问题解决 $getjson 与$get都会被IE缓存
- C#发送邮件代码
- 学习资源链接
- IOS 调试技巧
- 手机腾讯网js增量更新设计和实现
- ACM 大数加法
- 隔离二级内网用户访问一级内网资源不影响上网
- html 和 innerHTML区别
- google-breakpad在 C++11下编译错误 ISO C++ forbids declaration of ‘typeof’ with no type
- 黑马程序员--设计模式之代理模式 02
- 获取窗口句柄函数集合
- 操作手势的实现
- (转)win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案