您的位置:首页 > 其它

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.运行代码,看结果吧. 代码这里下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: