【ROS实践入门(十)ROS控制相机图像实践】

【ROS实践入门(十)ROS控制相机图像实践】

本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流~

联系方式:ziyuanw#foxmail.com(#换成@)

OpenCV中的cv::VideoCapture类驱动摄像头。根据摄像头图像的读取方式,有两种使用OpenCV实现摄像头驱动程序的方法。第一种是根据每秒钟给定的图像帧(Frame Per Second,FPS)进行轮询;第二种是为这类FPS的周期预设一个计时器,并在计时器的回调函数中完成实际的读取。通常情况下,FPS较大时最好使用轮询方法。

本文设计图像消息的发布与处理与订阅。

一、功能包中添加依赖项

在创建好新的功能包之后,必须在对应功能包的package.xml中设置OpenCV,ROS Image消息库和相关功能包的依赖项。

<depend package="sensor_msgs"/>
<depend package="opencv2"/>
<depend package="cv_bridge"/>
<depend package="image_transport"/>

在src/test_camera.cpp中必须添加头文件:

#include<ros/ros.h>
#include<image_transport/image_transport.h>
#include<cv_bridge/cv_bridge.h>
#include<sensor_msgs/image_encodings.h>
#include<opencv2/highgui/highgui.hpp>

头文件说明:ros/ros.h包含了ros核心程序模块,image_transport 中的API允许用户使用多种传输格式无缝衔接地发布图像,包括各种压缩图像格式和在ROS中以插件形式安装的各种编解码器(比如:compressed和theora)。cv_bridge字段用于从OpenCV图像到ROS图像消息的转换,其中有灰度、颜色(gray ,color)转换时会用到sensor_msgs进行图像编码。最后为了使用cv::VideoCapture()类还需要opencv2/highgui头文件中的API。

注意在使用图像消息格式发布者和普通消息发布者区别(伪代码):

//定义一个节点进程处理,用于用户和环境交互
ros::NodeHandle n;
//图像消息发布
image_transport::ImageTransport it;
image_transport::Publisher pub_image_raw;

//opencv捕捉图像帧
cv::VideoCapture camera;
cv::Mat image;
//CvImagePtr类型可以直接访问图像字段
cv_bridge::CvImagePtr frame;

普通消息(伪代码):

ros::NodeHandle n;
//packagename换成自己的功能包名称
//实例化为消息发布者
ros::Publisher pub=n.advertise<(packagename)::(package_msg)>("message",1000);
//实例化为消息订阅者
ros::Subscriber sub=n.subscribe("message",1000,messageCallback);

图像消息的发布者Publisher通常是image_transport库的实现。ros::Publisher可以发布单一图像,但是image_transport发布者可以发布单一图像或多个图像,并附带相应摄像头信息。

ROS中使用安装在系统中的独立的OpenCV库。必须在package.xml文件中指定一个编译和运行需要的opencv2依赖包:

 <build_depend>opencv2</build_depend>
 <exec_depend>opencv2</exec_depend>

并且在功能包的CMakeLists.txt中加入:

find_package(OpenCV)
include_directories($(catkin_INCLUDE_DIRS) ${OpenCV_INCLUDE_DIRS})

还要在相应节点的cpp文件中加入包含需要使用的OpenCV的库API的头文件。

查看图像:

rosrun image_view image_view image:=/usb_cam/image_raw

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值