• ROS1云课→12图像可视化


    ROS1云课→11曲线绘制


    从二维曲线过渡到二维视频流,如何在蓝桥ROS中进行实践学习呢。

    如上是算法实践的基础,比如人脸识别,车道识别算法,怎么做,云端也没啥摄像头。

    使用video_stream_opencv,下面详细介绍。


    在ROS1系统中,可以创建一个节点,在节点中展示来自即插即用摄像头的图像(云端可以用视频流)。这是一个复杂数据主题的例子,这些数据可以使用特殊工具更好地可视化或分析。只需要一个摄像头(或者一段视频)来完成这些,例如笔记本上的webcam(或一些符合标准的视频文件)。在这个案例中,通过调用OpenCV库实现一段基本的摄像头(或视频)捕捉程序,然后在ROS中将采集到的cv::Mat图像转换到ROS图像,这样就可以在主题中发布了。这个节点会在/camera主题里发布图像帧。

    使用rosrun运行节点并进行图像捕捉和发布工作。节点中的代码对于读者来说可能很陌生,但是在后面的课程中,会介绍如何在ROS中使用摄像头(或者视频)和图像,到时候再回来看这些代码,就会完全理解节点的工作原理和每行代码的含义:


    rosrun video_stream_opencv video_stream _video_stream_provider:=3d_mapping.mp4

    1. [ INFO] [1661869321.091075568]: Resource video_stream_provider: 3d_mapping.mp4
    2. [ INFO] [1661869321.091177650]: Getting video from provider: 3d_mapping.mp4
    3. [ INFO] [1661869321.101022675]: Video stream provider type detected: videofile
    4. [ INFO] [1661869321.101886789]: Camera name: camera
    5. [ INFO] [1661869321.102684898]: Setting camera FPS to: 30
    6. [ INFO] [1661869321.102730771]: Camera reports FPS: 23.976
    7. [ INFO] [1661869321.103452704]: Setting buffer size for capturing frames to: 100
    8. [ INFO] [1661869321.104175990]: Throttling to fps: 240
    9. [ INFO] [1661869321.104899852]: Publishing with frame_id: camera
    10. [ INFO] [1661869321.105675786]: Provided camera_info_url: ''
    11. [ INFO] [1661869321.106396018]: Flip horizontal image is: false
    12. [ INFO] [1661869321.106985600]: Flip vertical image is: false
    13. [ INFO] [1661869321.109821221]: using default calibration URL
    14. [ INFO] [1661869321.109877421]: camera calibration URL: file:///home/shiyanlou/.ros/camera_info/camera.yaml
    15. [ INFO] [1661869321.109961349]: Unable to open camera calibration file [/home/shiyanlou/.ros/camera_info/camera.yaml]
    16. [ WARN] [1661869321.109995031]: Camera calibration file /home/shiyanlou/.ros/camera_info/camera.yaml not found.
    17. [ INFO] [1661869321.110029900]: Opened the stream, starting to publish.

    一旦节点运行起来,我们就能够列出主题列表(rostopic list),并查看是否包含/camera 主题。查看是否正确捕捉到图像有一个简单直接的方法,使用rostopic hz /camera语句查看在主题中收到的图像更新频率是多少。频率通常是30Hz,如下图所示:

     

    显示视频

    想要查看视频,不能直接使用rostopic echo /camera命令,因为这会使用文本格式输出图片的信息,数据量会非常巨大,不可能进行任何有效的分析。因此,会调用下面的命令:

    $ rosrun image_view image_view image:=/camera

    这里使用了image_view节点,在窗口中展示了给定主题(使用image参数)的图像,如下图所示。这样我们就能简单直接地显示在主题内发布的每一幅图像或帧,即使数据来自网络也可以实现。你可以通过在窗口中点击右边的按钮将当前帧保存在硬盘里,通常会存在home目录下或者~/.ros目录下。

    ROS Kinetic还有rqt_image_view,支持在一个窗口查看多个图像,但不允许点击右边按钮保存图像。我们可以在GUI上手动选择图像主题或使用image_view:

    $ rosrun rqt_image_view rqt_image_view

    前面命令结果如下图所示:


    1. "1.0"?>
    2. <launch>
    3. <include file="$(find video_stream_opencv)/launch/camera.launch" >
    4. <arg name="camera_name" value="videofile" />
    5. <arg name="video_stream_provider" value="/xxx/xxx.mp4" />
    6. <arg name="buffer_queue_size" value="1000" />
    7. <arg name="fps" value="30" />
    8. <arg name="frame_id" value="videofile_frame" />
    9. <arg name="camera_info_url" value="" />
    10. <arg name="flip_horizontal" value="false" />
    11. <arg name="flip_vertical" value="false" />
    12. <arg name="loop_videofile" value="true" />
    13. <arg name="visualize" value="true" />
    14. include>
    15. launch>

  • 相关阅读:
    QGIS跨平台编译
    【信息论与编码基础】第1章 绪论
    LiveQing视频点播RTMP推流直播功能-用户管理配置一般用户设置观看权限
    Java分布式定时任务场景的思考与设计
    Linux 命令系统
    Notepad++安装插件和配置快捷键
    Java --- JVM程序计数器(PC寄存器)
    docker搭建私有仓库并推送本地镜像
    SpringBoot集成WebService(wsdl)
    mysql文档--架构体系--《Mysql底层探索》-文档架构首页
  • 原文地址:https://blog.csdn.net/ZhangRelay/article/details/126614366