ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇

声明:本文是笔者学习在ROS下使用OpenCV对获取的图象进行简单处理后的总结。仅供同行交流学习,文中若有错误的地方,望批评指正。

笔者使用的摄像头和系统简介:ubuntu 12.04

                                                        ROS hydro

                                                        PrimeSense 1.09(默认读者已经安装好了相应摄像机的驱动程序,可以使用ROS中的image_view来显示摄像机图象)

                                                        命令如下:$ roscore

                                                                            $ roslaunch openni2_launch openni2.launch

                                                                            $ rosrun image_view image_view image:=camera/rgb/image_ra

                                                        C++编程

程序实现的功能: 从摄像头中读取图象信息,转化成OpenCV中的Mat类型后,将图象转化成灰度图象,再将灰度图象转换成ROS下的图象格式进行输出。

正文


1. 简介:

在ROS系统中,可以使用多种视觉传感器(摄像头),其中包括简单的笔记本摄像头,也包括例如Kinect和Xtion的深度摄像头。通过摄像头我们可以读取周围的环境数据,从而可以进行视觉的相关操作。而在计算机视觉编程方面,OpenCV是一个强大的、开源的的计算机视觉库,里面有丰富的API,可以满足大部分计算机视觉任务。所以如果可以在ROS系统下使用OpenCV库,可以大大简化视觉编程的难度,起码不用自己编写函数。然而OpenCV官网没有提供ROS版本的OpenCV库,只有windows Mac 和Unix。原因很简单,因为ROS并不是实际意义上的操作系统,而是一个开源的程序开发架构,个人认为最大的特点在于节点的并行性。

虽然没有ROS版本的OpenCV库,但究其根本来说,在ROS使用OpenCV的关键问题就是:ROS环境下图象格式为sensor_msgs类型而OpenCV处理的图象格式是Mat类型(opencv2).ROS提供了这两种图象格式相互转换的软件包,使得我们可以将ROS系统下读取的图象转换成OpenCV的Mat格式,再使用OpenCV进行图像处理。

2. 理解ROS-OpenCV 转换架构(stack)

ROS提供了一个OpenCV到ROS的转换stack称为vision_opencv,这个stack中包含如下两个软件包:

1. cv_bridge:这个软件包包含了一个可以实现ROS的sensor_msgs/Image类型和OpenCV2中的cv::Mat类型相互转换的API库。可以把这个包理解为沟通ROS和OpenCV的桥梁。

2. image_geometry:笔者还没涉猎以后补充。

3. 安装perception程序包

perception程序包包含了ROS中和感知相关的各种程序包例如OpenCV、PCL等等。

安装方法:

                $ sudo apt-get install ros-版本-perception

perception中包含的程序包:

1. image-common:

这是一个变换程序包里面包括处理ROS中图片的基本变换程序包。如下:(重点介绍image_transport因为程序中涉及到,其他的日后补充。)

a) image_transport:

这个程序包是在发布图象时对图象进行JPEG/PNG的压缩编码,也可以加入自己的压缩编码形式。接收图象时保存图象的宽度和高度。相比不同的ROS中的订阅发布来说,image_transport的效率更高。

b) image_。。。

c) image_。。。

d) image_。。。

2. image-pipline

3. image-transport-plugins

4. laser-pipeline

5. perception-pcl

6. vision-opencv

4. 使用cv_bridge在ROS和opencv之间转换图象

ROS和OpenCV转换具体使用的是cv_bridge中的CvBridge库,其转换机制如下图所示:

ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇_第1张图片

可见cv_bridge在类型转换过程中充当着桥梁的作用。


注意:以上内容是笔者目前总结的,日后会进行持续完善,具体代码讲解会在下面一篇博客中介绍。












你可能感兴趣的:(Robot,Operating,System(ROS))