随手笔记——将ROS图像话题转为OpenCV图像格式处理后再转为ROS图像话题发布(C++版)

这篇具有很好参考价值的文章主要介绍了随手笔记——将ROS图像话题转为OpenCV图像格式处理后再转为ROS图像话题发布(C++版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

将ROS图像话题转为OpenCV图像格式处理后再转为ROS图像话题发布,主要通过cv_bridge的toImageMsg()和toCvCopy()函数(C++版)。

关键函数

CvImagePtr toCvCopy(const sensor_msgs::ImageConstPtr& source,
                     const std::string& encoding = std::string());
CvImagePtr toCvCopy(const sensor_msgs::Image& source,
                     const std::string& encoding = std::string());
class CvImage
 {
   sensor_msgs::ImagePtr toImageMsg() const;
​
   // Overload mainly intended for aggregate messages that contain
   // a sensor_msgs::Image as a member.
   void toImageMsg(sensor_msgs::Image& ros_image) const;
 };

代码

 #include <ros/ros.h>
 #include <image_transport/image_transport.h>
 #include <cv_bridge/cv_bridge.h>
 #include <sensor_msgs/image_encodings.h>
 #include <opencv2/imgproc/imgproc.hpp>
 #include <opencv2/highgui/highgui.hpp>
  static const std::string OPENCV_WINDOW = "Image window";
 
 class ImageConverter
 {
   ros::NodeHandle nh_;
   image_transport::ImageTransport it_;
   image_transport::Subscriber image_sub_;
   image_transport::Publisher image_pub_;
​
 public:
   ImageConverter()
     : it_(nh_)
   {
     // Subscrive to input video feed and publish output video feed
     image_sub_ = it_.subscribe("/camera/image_raw", 1,
       &ImageConverter::imageCb, this);
     image_pub_ = it_.advertise("/image_converter/output_video", 1);
​
    cv::namedWindow(OPENCV_WINDOW);
   }
 
   ~ImageConverter()
   {
     cv::destroyWindow(OPENCV_WINDOW);
   }
 
   void imageCb(const sensor_msgs::ImageConstPtr& msg)
   {
      cv_bridge::CvImagePtr cv_ptr;
     try
     {
       cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
     }
     catch (cv_bridge::Exception& e)
     {
       ROS_ERROR("cv_bridge exception: %s", e.what());
       return;
     }
​
     // Draw an example circle on the video stream
     if (cv_ptr->image.rows > 60 && cv_ptr->image.cols > 60)
     cv::circle(cv_ptr->image, cv::Point(50, 50), 10, CV_RGB(255,0,0));
     // Update GUI Window
     cv::imshow(OPENCV_WINDOW, cv_ptr->image);
     cv::waitKey(3);
 
     // Output modified video stream
     image_pub_.publish(cv_ptr->toImageMsg());
   }
 };
 
 int main(int argc, char** argv)
 {
   ros::init(argc, argv, "image_converter");
   ImageConverter ic;
   ros::spin();
   return 0;
 }

代码来自wiki文章来源地址https://www.toymoban.com/news/detail-526152.html

到了这里,关于随手笔记——将ROS图像话题转为OpenCV图像格式处理后再转为ROS图像话题发布(C++版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenCV】C++红绿灯轮廓识别+ROS话题实现

    目录 前言 一、背景知识 Opencv轮廓检测 ROS相关知识 二、环境依赖 三、具体实现 Step1:初始化ROS,订阅话题 Step2:接收话题,进入回调 1. 帧处理  2. 膨胀腐蚀处理 Step3:红绿特征处理 1. 提取绘制轮廓 2. 转换矩形、排序 3. 显示检测结果 四、完整代码 五、使用方法 CMakeLists.

    2024年02月16日
    浏览(39)
  • ROS学习笔记(二):ROS话题的发布与订阅

    第十讲  发布者Publisher的编程 1. 创建功能包 learning_topic  $ cd ~/test1/src  $ catkin_create_pkg learning_topic std_msgs rospy roscpp geometry_msgs turtlesim 2.执行C++文件程序如下:放在创建的功能包的/learning_topic/src里 程序名为velocity_publisher.cpp 2.如何实现一个发布者(发布到ros自带节点 ) (1)初

    2024年02月04日
    浏览(78)
  • ROS2学习笔记三:话题Topic

    目录 前言 1 话题简介 2 常用指令 3 RCLCPP实现实现话题 3.1 创建工作空间 3.2 代码编写 3.2.1 发布端编写 3.2.2 发布端编写 ROS2中的一个重要概念是话题(Topic)。话题是一种通过发布者和订阅者之间进行异步通信的机制。发布者(Publisher)将消息发布到特定的话题上,而订阅者(

    2024年01月20日
    浏览(42)
  • PIL、OpenCV、numpy处理图像格式的相互转化方式

    OpenCV读取图像后返回的是一个代表图像的NumPy数组,采用的格式是 H×W×C,通道顺序为BGR 使用matplotlib绘图时,可以读取tesnor和numpy数据类型,图片通道顺序为RGB,且尺寸为(H,W,C)。 使用np.array(image)和np.asarray(image)可以将 PIL Image 图像转换成 numpy 数组。 使用Image.fromarray(np.uint8(i

    2024年02月07日
    浏览(44)
  • 随手笔记——OpenCV 的基础使用方法

    演示了如下几个操作:图像读取、显示、像素遍历、复制、赋值等。大部分的注解已写在代码里面。编译该程序时,需要在 CMakeLists.txt 中添加 OpenCV 的头文件,然后把程序链接到库文件上。同时,由于使用了 C++ 11 标准(如 nullptr 和 chrono),还需要设置一下编译器。

    2024年02月16日
    浏览(36)
  • “Python OpenCV 图像格式转换:RGB与BGR互转“——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是R...

    “Python OpenCV 图像格式转换:RGB与BGR互转”——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是RGB和BGR格式之间的转换。本文将详细介绍如何使用opencv-python库将图像从RGB格式转换为BGR格式以及从BGR格式转换为RGB格式。 要实现图像格

    2024年02月12日
    浏览(77)
  • 【Python】tensor格式数据转为图像,并保存图像详解和示例

    在项目中遇到一个tensor格式的数据,要保存为图像,此文对转换过程通过示例分享,以记录学习过程和帮助大家遇到同类问题时使用。 示例过程: (1)先创建一个张量,此处可以换成自己的数据。 (2)然后.detach()来释放与该结果相关的缓存。 (3)再转为CPU格式,避免某些

    2024年01月16日
    浏览(52)
  • 随手笔记——根据相机位姿实现多个RGBD图像点云的叠加

    程序主要实现:(1). 根据内参计算一对 RGB-D 图像对应的点云;(2). 根据各张图的相机位姿(也就是外参),把点云加起来,组成地图。

    2024年02月16日
    浏览(48)
  • Opencv+Python笔记(五)图像阈值化处理

    图像阈值化可以理解为一个简单的图像分割操作,阈值又称为临界值,它的目的是确定出一个范围,然后这个范围内的像素点使用同一种方法处理,而阈值之外的部分则使用另一种处理方法或保持原样。 阈值处理有2种方式,一种是固定阈值方式,又包括多种处理模式,另一

    2023年04月26日
    浏览(35)
  • 【音视频原理】图像相关概念 ⑥ ( YUV 与 RGB 之间的转换 | YUV444 颜色编码格式 转为 RGB 格式 | RGB 颜色编码格式 转为 YUV444 格式 )

    YUV 与 RGB 颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式 转为 RGB 格式 的 转换公式 取决于 于 YUV 的具体子采样格式 : YUV444 YUV422 YUV420 YUV444 格式 转为 RGB 格式 的 转换公式如下 : R = Y + 1.13983 * (V - 128) G = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128) B = Y + 2.03211 * (U

    2024年01月24日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包