opencv 图像上画出目标运动的轨迹_opencv学习之旅_绘制跟踪轨迹

如何将运动物体的轨迹画出来 我的想法是先;用CAMSHIFT跟踪物体,这个函数会返回一个track_box,将box的中心提取出来,然后以这个中心在另外的图像上画出来,然后将这张图像处理,提取轮廓,提取出来的轮廓就是物体的运动的序列。

示例:

//对运动物体的跟踪:

//如果背景固定,可用帧差法 然后在计算下连通域 将面积小的去掉即可

//如果背景单一,即你要跟踪的物体颜色和背景色有较大区别 可用基于颜色的跟踪 如CAMSHIFT 鲁棒性都是较好的

//如果背景复杂,如背景中有和前景一样的颜色 就需要用到一些具有预测性的算法 如卡尔曼滤波等 可以和CAMSHIFT结合

#ifdef _CH_

#pragma package

#endif

#ifndef _EiC

#include "cv.h"

#include "highgui.h"

#include

#include

#endif

IplImage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg = 0;

IplImage *trackimg;

//用HSV中的Hue分量进行跟踪

CvHistogram *hist = 0;

//直方图类

int backproject_mode = 0;

int select_object = 0;

int track_object = 0;

int show_hist = 1;

int p = 0;

int w = 50;//每50个帧确定一点

CvSize sz;

CvPoint origin;

CvPoint center;

CvPoint lastcenter;

CvRect selection;

CvRect track_window;

CvBox2D track_box;

//Meanshift跟踪算法返回的Box类

//typedef struct CvBox2D{

//CvPoint2D32f center; /* 盒子的中心 */

//CvSize2D32f size; /* 盒子的长和宽 */

//float angle; /* 水平轴与第一个边的夹角,用弧度表示*/

//}CvBox2D;

CvConnectedComp track_comp;

//连接部件

//typedef struct CvConnectedComp{

//double area; /* 连通域的面积 */

//float value; /* 分割域的灰度缩放值 */

//CvRect rect; /* 分割域的 ROI */

//} CvConnectedComp;

int hdims = 16;

//划分直方图bins的个数,越多越精确

float hranges_arr[] = {0,180};

//像素值的范围

float* hranges = hranges_arr;

//用于初始化CvHistogram类

int vmin = 10, vmax = 256, smin = 30;

//用于设置滑动条

void on_mouse( int event, int x, int y, int flags, void* param )

//鼠标回调函数,该函数用鼠标进行跟踪目标的选择

{

if( !image )

return;

i

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值