ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇
来源:互联网 发布:手机淘宝名字好听 编辑:程序博客网 时间:2024/06/05 09:55
声明:本文是笔者学习在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库,其转换机制如下图所示:
可见cv_bridge在类型转换过程中充当着桥梁的作用。
注意:以上内容是笔者目前总结的,日后会进行持续完善,具体代码讲解会在下面一篇博客中介绍。
- ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇
- 在ROS中使用OpenCV进行简单的图象处理--原理篇
- ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
- ROS学习笔记(三):在ROS中使用USB网络摄像头传输图像
- ROS学习笔记(三):在ROS中使用USB网络摄像头传输图像
- ROS学习笔记(一):在ROS中使用USB网络摄像头传输图像
- 在ROS中使用Cartographer进行SLAM
- ROS学习笔记(1)
- ROS学习笔记(一):ROS 系统的概述
- ROS学习笔记(一)----ROS的框架
- ros学习笔记--ros的服务
- ROS学习笔记 (四):使用ROS实现ARM与PC之间的通讯
- ROS学习笔记(三)先锋机器人的使用 — 参考 ROS wiki 和 Mobile wiki
- ROS学习笔记1
- ros学习笔记(1)
- ROS学习笔记:tf的学习与使用(一)
- ROS学习笔记:tf的学习和使用(二)
- ROS学习笔记(1)-----ROS Kinetic版本安装
- 华为机试——查找兄弟单词
- Struts2属性驱动封装(了),需要使用ognl表达式
- CSS中@import的问题
- 华为机试——字符串加解密
- 如何更改应用程序加载基地址
- ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇
- WIN10下配置java jdk
- GCC 编译过程及每个过程做了那些事(收集)
- WebBrowser(IE) 与 JS 相互调用
- java笔试题小记
- 锤子CTO钱晨:加班要么是你笨,要么是工作安排不合理
- 地图,不哭不闹哈
- 《Effective Modern C++》翻译--简介
- java入门学习(1)一简介及其基础特点