织梦CMS - 轻松建站从此开始!

罗索

camshift 实现自动化跟踪的小技巧

落鹤生 发布于 2010-04-25 16:59 点击:次 
camshift 实现自动化跟踪的小技巧 opencv 提供了使用基于颜色的跟踪算法camshift, 很好的算法,可是它是个半自动的算法,它需要用户在跟踪界面设定跟踪的目标。怎么预先设定目标再来跟踪呢? 本人偷了个懒,加入了用一张图片来设定跟踪的目标,在启动中加载图片,生成
TAG:

camshift 实现自动化跟踪的小技巧

opencv 提供了使用基于颜色的跟踪算法camshift, 很好的算法,可是它是个半自动的算法,它需要用户在跟踪界面设定跟踪的目标。怎么预先设定目标再来跟踪呢?
本人偷了个懒,加入了用一张图片来设定跟踪的目标,在启动中加载图片,生成跟踪需要的histogram。这样实现了自动化的跟踪吧。

步骤如下:
1. 找到你需要跟踪的物体,拿到摄像头前,照一张相(print screen),这里需要注意的是,由于光线变化,临近摄像头会亮一些,离远会暗一些,那么最好跟踪的物体的拍摄颜色与实际跟踪中颜色相近。

2. 打开画笔功能,新建一张图片(320*240),大小与视频源图像一致,把物体截取放大,这样跟踪的颜色区域就都在图像中了。

例如这是一个跟踪绿色物体的图片

3。在代码中加入

 

  1. void loadTemplateImage() 
  2.  IplImage *tempimage = cvLoadImage("F:/OM_tracking/Test cam shift/ShadowTrack/Debug/green.bmp",1); 
  3.  cvCvtColor( tempimage, hsv, CV_BGR2HSV ); 
  4.  int _vmin = vmin, _vmax = vmax; 
  5.  
  6.  cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0), 
  7.   cvScalar(180,256,MAX(_vmin,_vmax),0), mask ); 
  8.    
  9.  cvSplit( hsv, hue, 0, 0, 0 ); 
  10.   
  11.  selection.x = 1; 
  12.  selection.y = 1; 
  13.  selection.width = 320-1; 
  14.  selection.height= 240-1; 
  15.  
  16.  cvSetImageROI( hue, selection ); 
  17.  cvSetImageROI( mask, selection ); 
  18.  cvCalcHist( &hue, hist, 0, mask ); 
  19.  
  20.  float max_val = 0.f;   
  21.      
  22.  cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 ); 
  23.  cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 ); 
  24.  cvResetImageROI( hue ); 
  25.  cvResetImageROI( mask ); 
  26.  track_window = selection; 
  27.  track_object = 1; 
  28.  
  29.  cvReleaseImage(&tempimage); 

4,去掉原来的生成Hist的代码。在启动时候加入loadTemplateImage

5.运行代码,看结果吧. 代码这里下载

(hardVB)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9259.html]
本文出处:CSDN博客 作者:hardVB
顶一下
(2)
50%
踩一下
(2)
50%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容