参考一个实例行人检测
在ubuntu+ros环境下,利用RGBD采集数据给小车,实现行人跟随。
原作者开源的例子是出现一个窗口,用鼠标选择一个区域做kcf跟随,选择的物体不受限制,物体移动后,机器人随即跟随。
博主实现的是用opencv行人检测的demo,替换原作者的例子。该demo在opencv-2.4.13/samples/cpp/peopledetect.cpp下。
先认识一下原作者的例子中的runtracker.cpp,其中的ImageConverter类是核心,首先对接收/发送主题的Publisher/Subscrible初始化,
设置回调函数。
image_sub_ = it_.subscribe("/camera/rgb/image_rect_color", 1,&ImageConverter::imageCb, this);
depth_sub_ = it_.subscribe("/camera/depth/image", 1,&ImageConverter::depthCb, this);
pub = nh_.advertise<geometry_msgs::Twist>("/mobile_base/mobile_base_controller/cmd_vel", 1000);image_sub_是接受rgb图的subscribe,执行imageCb回掉函数,imageCb主要是将摄像头的数据显示在窗口中,选择感兴趣区域。
depth_sub_是接受深度图的subscribe,执行depthCb回掉函数,depthCb作用就是计算距离和方向。
将手动选择感兴趣区域改为自动选择感兴趣区域,是在imageCb函数中修改。
imageCb中 cv::setMouseCallback(RGB_WINDOW, onMouse, 0);监听鼠标操作,如果鼠标不动,程序不会往下执行。onMouse为鼠标监听回调。
要实现自动选择肯定就不能用这个了,将其注掉。
onMouse函数:当按下鼠标左键时,这个点就是起始点,按住鼠标左键移动鼠标&