目的:
Opencv处理后的图像,将其转变为Ros消息发布出来,就可以在Rviz中Add话题从而显示了。

实现:

1 创建一个发布者节点不断发布图像

1.1 程序

   #include <ros/ros.h>#include <image_transport/image_transport.h>#include <opencv2/highgui/highgui.hpp>#include <cv_bridge/cv_bridge.h>int main(int argc, char** argv){ros::init(argc, argv, "image_publisher");ros::NodeHandle nh;image_transport::ImageTransport it(nh);image_transport::Publisher pub = it.advertise("camera/image", 1);cv::Mat image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR);cv::waitKey(30);sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();ros::Rate loop_rate(5);while (nh.ok()) {pub.publish(msg);ros::spinOnce();loop_rate.sleep();}}

1.2 程序解释

1.2.1 头文件

  • image_transport/image_transport.h

  • 主要包括发布或者是订阅一个图像所需的内容。

  • opencv2/highgui/highgui.hpp

  • 主要是我们使用这个读取一张照片,然后转化为ROS的消息格式。

  • v_bridge/cv_bridge.h

  • 主要是我们将使用这个进行图像格式的转换,把opencv的Mat转化ROS的消息格式,或者把ROS格式的消息转化为opencv的Mat。

1.2.2 main函数内部程序

  • image_transport::ImageTransport it(nh)

  • 使用ros::NodeHandle进行初始化。

  • image_transport::Publisher pub = it.advertise("camera/image", 1)

  • 发布一个”camera/image“话题。

  • sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg()
    这行程序是把读取到的opencv格式的Mat 转换为ROS的消息格式。

2 增加视频流通过网络摄像头

上面的例子是在命令行输入图像的路径。然后图像被转换然后发布到一个订阅者那里。但在大部分的情况下,这并不是一个很实用的方法。我们通常需要处理视频流做进一步的分析。
可以修改这个例子,以使其方便的支持摄像头也就是(cv::VideoCapture)。

   #include <ros/ros.h>#include <image_transport/image_transport.h>#include <opencv2/highgui/highgui.hpp>#include <cv_bridge/cv_bridge.h>#include <sstream>   // for converting the command line parameter to integerint main(int argc, char** argv){if(argv[1] == NULL) return 1;ros::init(argc, argv, "image_publisher");ros::NodeHandle nh;image_transport::ImageTransport it(nh);image_transport::Publisher pub = it.advertise("camera/image", 1);std::istringstream video_sourceCmd(argv[1]);int video_source;if(!(video_sourceCmd >> video_source)) return 1;cv::VideoCapture cap(video_source);if(!cap.isOpened()) return 1;cv::Mat frame;sensor_msgs::ImagePtr msg;ros::Rate loop_rate(5);while (nh.ok()) {cap >> frame;if(!frame.empty()) {msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", frame).toImageMsg();pub.publish(msg);cv::waitKey(1);}ros::spinOnce();loop_rate.sleep();}}

解释:如果你只有一个单独的设备,那么不用再使用命令行传递参数给它。这种情况下,使用硬编码即可,并把设备Opencv即可,如:cv::VideoCapture(0) 。
具体可参考转载的文档。

Ros发布图像/视频流消息相关推荐

  1. 【ROS】Ros 发布2d boundingbox消息

    有时候需要把目标检测输出的boundingbox发送到其他结点(比如跟踪结点)执行下游任务,因此需要在结点见发送消息,ros自带的消息类型不能满足我们的需求(有一个3d的boundingbox),需要 ...

  2. opencv 读取相机图像+ros发布图像

    #!/usr/bin/python2 # coding=utf-8import cv2 import numpy as np from std_msgs.msg import Header from ...

  3. ROS发布订阅的消息的种类及使用

    #1.消息(std_msgs)的种类 在/opt/ros/melodic/include/std_msgs文件夹中查询 或参考: https://www.itdaan.com/tw/b30f2309f ...

  4. ros 发布信息频率_ROS 消息发布器和订阅器Publisher, Subscriber

    1.编写发布器节点 节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点("talker"),它将不断的在 ROS 网络中广播消息.切换到之前创建的 b ...

  5. ROS发布/订阅Float64MultiArray数组类消息(C++和Python相互发布和订阅)

    在terminal用指令发布一个Float64MultiArray消息,这个在调试时特别好用,注意格式,最后一行的data: [1,2,3]中冒号和后面的中括号间要有空格 rostopic pub / ...

  6. ros 发布信息频率_ROS:消息发布器和订阅器(c++)

    学习资料主要源自http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 $ roscd beginner_t ...

  7. ros发布和订阅图像的压缩——高效图传(适用带宽不足问题)

    ros话题机制默认通过TCP进行传输 因此特别容易堵塞...... 必须要有compressed的图像, img_raw传输速度非常慢 参考:https://blog.csdn.net/qq_3046 ...

  8. ROS Realsense SDK发布图像和Camera_info

    先上代码: #include <ros/ros.h> #include <librealsense2/rs.hpp> #include <iostream> #in ...

  9. 使用ros发布UVC相机和串口IMU数据

    1.目的:为了可以标定普通USB相机和固定在相机上的外置IMU的外参,我希望通过ROS获取更高分辨率和更高频率的图像数据,并且可以将图像和imu的topic发布出来,直接使用rosbag record ...

最新文章

  1. 如何在多Node版本的情况下公用一个npm
  2. 如何分析IBASE对应的icon无法正常显示的问题
  3. 德国巴伐利亚山谷积雪遍地 汽车被大雪掩埋
  4. 前端学习(2020)vue之电商管理系统电商系统之完成商品添加操作
  5. Linux-存储服务之NFS
  6. requirejs 入门【链接】
  7. AC日记——潜伏者 洛谷 P1071 (模拟)
  8. linux命令之route
  9. PHP accesstoken失效,微信开发-ACCESS TOKEN 过期失效解决方案
  10. 解决使用百度地图API时偏移问题并自适应中心点和比例
  11. 2021年中国家具制造业经营现状分析:营业收入达8004.6亿元,利润总额达433.7亿元[图]
  12. HackBGRT(一):修改window系统启动logo动画
  13. Windows成员服务器用户权利/本地策略审计
  14. 辛选主播首秀即登榜,直播复盘背后的“吸金术”
  15. 安装完sdk后,在cmd运行adb,发现不行。
  16. [Fw]人和人之间在八小时之外的差别
  17. 当一个程序员表情夸张,双手在键盘上疯狂敲击,你真的以为是在敲代码!!?
  18. 网站刷关键词_2019年刷百度统计的最新技巧,让你又多一种推广渠道
  19. 装了McAfee VirusScan Enterprise 8.0后FoxMail不能发邮件的解决办法
  20. MCB MCCB ACB ELCB RCCB的区别和特性

热门文章

  1. 中国为什么要发展人工智能
  2. VC的resources.h中各项的意涵
  3. leetcode 1143
  4. Tableau如何隐藏工作表
  5. 二三里APP逆向- 国庆篇
  6. 如何正确阅读互联网人的简历呢?
  7. linux pclint配置_代码静态分析工具PC-LINT安装配置
  8. 微服务(分布式架构)
  9. vim 自带教程命令_vim教程和命令示例
  10. oracle av rd ms,Oracle AWR报告生成与查看