本文主要讲述在ROS下使用opencv进行图像处理,并给出了一个详细示例。

首先建立一个ros包,在CMakeLists.txt中加入以下代码段,用于找到并链接OpenCV。安装完整版的ROS会顺带把OpenCV 2.4.x也装了,不过可能不太完整,缺一些头文件或者库之类的。最好自己再装一遍,直接去OpenCV官网或者github下载源码编译安装,也可对Ubuntu系统下安装依赖性有进一步了解。如系统中存在多个opencv版本的情况,可参考《ubuntu 安装使用多版本opencv》这篇博客。

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

在ROS中通过cv_bridge包实现ros图像和opencv图像的转换,通过image_transport包订阅和发布图像数据。

此外,ros indigo版本的cv_bridge依赖于opencv2.4.x。如果自己装的版本过高,可能会存在兼容性问题,导致图像或视频无法加载。其解决办法可参考博文《OpenCV 3与ROS兼容、OpenCV多版本共存》,主要是下载cv_bridge后重新编译。

ROS和OpenCV的关系图如下,图片来源于ros官网。

下面介绍一个简单的图像处理示例,实现对黑色条纹的检测(有点类似于智能车比赛的摄像头组)。由于黑色像素较为明显,因此先对图像进行灰度处理变成单通道的,再进行Ostu阈值分割(大津法),得到二值化的图像就只有0和1了,其中为0的部分为黑色。

关键代码段如下:

    cv::Mat image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR);cv::Mat gray;cv::Mat edges;cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);cv::threshold(gray, edges, 76, 255, CV_THRESH_OTSU);   //参数76可设置成自动调节

我写了两个节点,一个用于加载图像并进行图像,一个用于显示图像,两个要同时运行才可看到效果。运行时别忘了source工作空间,并打开roscore。

rosrun img_process read_img_node argv[1]
rosrun img_process show_img_node

运行中的效果截图如下:

以上是针对静态图像的处理,如果视频流和从摄像头获取的,图像处理的过程还是一样,只是获取的地方改成如下:

cv::VideoCapture cap(argv[1]);   //传入摄像头参数或视频文件目录
if(!cap.isOpened())return;
cv::Mat frame;
cap >> frame;                    //这样便可实时获取图像数据

此外,笔者还提供了matlab程序进行同样的处理,效果如下(貌似在ros下效果好点):

不过总的来说,这只是一个简单的示例,实际运用中还有很多没有考虑的地方,如光照、噪点等。

整个工程的源代码在下面的网址可以下到:

https://github.com/WelinLee/ROS_OPENCV_PRO

运用ROS和OpenCV进行简单的图像处理之检测相关推荐

  1. opencv学习—简单方法用于斑马线检测(Python)

    opencv学习-简单方法用于斑马线检测(Python) 目录 opencv学习-简单方法用于斑马线检测(Python) 1.读取原图像并将图像灰度化 2.通过高斯滤波去除噪声信息 3.阈值分割 4. ...

  2. QT+opencv实现简单的图像处理界面

    本来实现的功能是比较简单的,但在实现过程中遇到不少问题,所以就写下来作为一个小结,也可以供大家参考: 实现的目标窗口如下: 1.其中菜单栏的文件里实现打开测试文件,打开自定义文件,还原图像,清除图像, ...

  3. OpenCV+Python简单实践之硬币检测以及条形码检测

    目录标题 一.简单图片格式 1.位图 2.文件压缩比 二.用奇异值分解(SVD)对一张图片进行特征值提取(降维)处理 1.代码 2.效果 三.采用图像的开闭运算(腐蚀-膨胀),检测出2个样本图像中硬币 ...

  4. ROS群机器人自动驾驶TensorFlow和人脸检测跟踪OpenCV

    涵盖了最新 ROS 发行版 ROS Melodic Morenia 和 Ubuntu Bionic (18.04) 中的项目 从基础开始,介绍了 ROS-2,了解它与 ROS-1 的不同之处 在 RO ...

  5. opencv QImage与Mat 互转 及简单的图像处理

    opencv(mat与qimage 的互转)及简单的图像处理 一.opencv库文件 二.使用方式(Qt) 三.QImage 转 Mat (不太全,多多指教) 四.Mat转 QImage 五.一些简单 ...

  6. 对OpenCV、计算机视觉、图像处理的简单介绍

    OpenCV简介: OpenCV的最初是CV是"computer vision"的缩写,"computer vision"即计算机视觉.它由1999年英特尔建立 ...

  7. ROS学习—opencv使用之图片传输

    ROS学习-opencv使用之图片传输 前提操作:ros已安装,opencv已安装. 首先在工作空间中新建一个功能包rosopencv catkin_create_pkg rosopencv sens ...

  8. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了. 在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简 ...

  9. 利用Matlab进行相机标定并使用openCV进行简单三维重建

    注:本文主要针对Matlab和OpenCV跨平台进行相机标定.单相机三维重建工作的实现,因为我发现网上竟然没有一篇博客径直指出这两者在进行图像处理时的巨大差异(坐标系完全不同),不然我也不会走了很多弯 ...

最新文章

  1. Centos 7 全网备份Rsync
  2. Caffe学习系列(17):模型各层特征和过滤器可视化
  3. 需求文档可以不签字吗之三-一个实例
  4. 为Tueri.io构建React图像优化组件
  5. 第 5-4 课:ThreadLocal 详解 + 面试题
  6. jcmd jmap应用:一个String经典笔试题的验证
  7. chrome介绍与用法
  8. 启动失败_启动失败了?
  9. MySQL学习笔记十七:复制特性
  10. ❤️《IOC理论推导》
  11. 模型笔记1---3d max 导入obj模型设置
  12. 云控微信开发SDK使用教程--手机微信收钱任务执行结果通知服务端
  13. 为基于GTK/CLUTTER的库增加GJS支持
  14. 国务院办公厅关于2015年部分节假日安排的通知
  15. 在计算机术语中 将ALU控制器和,计算机组成原理试管理-题集
  16. Centos7系或中标麒麟ifconfig/ip addr无法显示ip地址的详细解决方法
  17. 计算机科学领域专业,计算机科学与技术专业主要包括哪些领域?
  18. 《全球数字经济白皮书》发布:产业数字化是数字经济发展的主引擎
  19. 学会PDF转换器使用方法,再也不会熬夜整理PDF文件了
  20. 阿里云ACE深圳同城会 开始报名

热门文章

  1. PAT 甲 1099 Build A Binary Search Tree
  2. haar级联分类器车辆检测_Haar级联分类器Open CV用于人脸检测的术语
  3. VMWare14 安装Mac OS系统(操作图解)
  4. SMART还真是“深入人心”呀!
  5. Python+Selenium模拟淘宝滑块并爬取商品数据
  6. html5仿抖音php,H5+Jquery 仿抖音视屏切换
  7. pytorch安装错误
  8. 百度的留痕是技术还是靠的什么?智客SEO
  9. Hive可视化客户端工具
  10. 周易卦爻解读笔记——讼卦