cv_bridge中的编码模式与实现

2023-05-16

image_encodings.cpp文件是关于图像编码模式的源文件,其中规定了RGB的图像以及深度图的编码模式

该编码文件image_encodings.cpp所依赖的头文件图

命令空间  sensor_msgs::image_encodings 下的函数

Functions

int bitDepth (const std::string &encoding)
bool hasAlpha (const std::string &encoding)
bool isBayer (const std::string &encoding)
bool isColor (const std::string &encoding)
bool isMono (const std::string &encoding)
int numChannels (const std::string &encoding)

Variables

const std::string BGR8 = "bgr8"
const std::string MONO16 = "mono16"
const std::string MONO8 = "mono8"
const std::string TYPE_16SC1 = "16SC1"
const std::string TYPE_16UC1 = "16UC1"
const std::string TYPE_32FC1 = "32FC1"
const std::string TYPE_32SC1 = "32SC1"
const std::string TYPE_64FC1 = "64FC1"
const std::string TYPE_8SC1 = "8SC1"
const std::string TYPE_8UC1 = "8UC1"

那么关于深度图的编码的方式 有如下:TYPE_8UC1 TYPE_64FC1 等等
// B = bits (8, 16, 32,64), T = type (U, S, F)
#define CHECK_BIT_DEPTH(B, T) if (encoding == TYPE_##B##T##C1 || encoding == TYPE_##B##T##C2 ||  encoding == TYPE_##B##T##C3 ||
 encoding == TYPE_##B##T##C4)    return B;
比如使用这样编码方式,对kinect获得的深度进行显示,程序如下

#include <ros/ros.h>                           //ros 的头文件
#include <image_transport/image_transport.h>   //image_transport
#include <cv_bridge/cv_bridge.h>              //cv_bridge
#include <sensor_msgs/image_encodings.h>    //图像编码格式
#include <opencv2/imgproc/imgproc.hpp>      //图像处理
#include <opencv2/highgui/highgui.hpp>       //opencv GUI

static const std::string OPENCV_WINDOW = "Image window";   //申明一个GUI 的显示的字符串

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/depth/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;  //申明一个CvImagePtr
    try
    {
      cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::TYPE_32FC1);
    }
    catch (cv_bridge::Exception& e)
    {
      ROS_ERROR("cv_bridge exception: %s", e.what());
      return;
    }
//转化为opencv的格式之后就可以对图像进行操作了
    // 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;
}  

最主要的就是编码的方式的正确即可实现深度图的显示



从中我们可以看得处深度图使用cv_bridge进行转换与RGB图之间的转换为OPENCV可处理的结构基本上类似,但是最重要的就是编码的模式的正确,所以这是非常关键的
为了使用深度图与RGB的图生成点云,所以我们需要对深度图使用正确的编码模式,具体的代码我就不再展示了,
那么我们可以看一下,对于不同的编码模式生成点云之间的区别


看起来就好像断层了一样,但是如果配合正确的编码的模式效果就不是这样的了,所以在使用cv_bridge的时候选择正确的编码模式是非常重要的,
暂时就更新到这里了,如果有问题可以直接评论,或者关注微信公众号,或者加入QQ交流群与更多的人交流

 





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cv_bridge中的编码模式与实现 的相关文章

  • 设计模式之(十)桥接模式Bridge

    Bridge模式定义 将抽象和行为划分开来 各自独立 但能动态的结合 任何事物对象都有抽象和行为之分 xff0c 例如人 xff0c 人是一种抽象 xff0c 人分男人和女人等 xff1b 人有行为 xff0c 行为也有各种具体表现 xff
  • linux bridge 不工作,linux – Bridge无法正常工作

    我们希望通过eth0和eth1接口在我们的主板上创建桥 mybridge 该板运行 Linux 2 6 34 9 以下是命令 xff1a brctl addbr mybridge ifconfig eth1 0 0 0 0 ifconfig
  • Linux bridge table(brctl)

    目录 一 brctl简介 二 常用命令 2 1 查看所有网桥信息 2 2 查看指定网桥信息 2 3 新建网桥 2 4 启用 停用网桥 2 5 添加网桥端口 2 6 移除网桥端口 2 7 删除网桥 需先移除相关端口 三 实验案例 3 1 测试
  • 2021-02-07 SONiC SAI结构2 1D Bridge

    SONiC SAI结构2 1D Bridge 以太网交换流水线结构 SONiC SAI对交换机 路由器的报文处理流程建立了标准化的行为模型 即使不同的交换芯片内部实现报文处理的方式各不相同 xff0c 由于行为模型是报文处理过程的抽象描述
  • ROS中用cv_bridge和opencv时出现cv::xxx未定义的问题

    1前景提要 xff1a cv bridge是ros中常用的消息类型转换的包 xff08 ros自带的包 xff09 xff0c 要在ros环境下利用opencv处理USB相机拍摄的视频必须用到cv bridge xff08 如下图 xff0
  • ubuntu18.04依赖于OpenCV3.4.13版本的cv_bridge使用

    前言 ROS原装的cv bridge位于 opt ros melodic include cv bridge 它依赖于OpenCV 3 2 在当前ROS包中为了使用基于新的OpenCV 3 4 10的cv bridge xff0c 网上有博
  • Linux虚拟网络设备之bridge(桥)

    什么是bridge xff1f 首先 xff0c bridge是一个虚拟网络设备 xff0c 所以具有网络设备的特征 xff0c 可以配置IP MAC地址等 xff1b 其次 xff0c bridge是一个虚拟交换机 xff0c 和物理交换
  • ROS python3使用cv_bridge报错,在melodic中使用python3 cv_bridge

    ROS cv bridge报错 xff1a 在melodic中使用python3 43 cv bridge 问题描述解决方案使用方法2022 7补充 问题描述 ROS与opencv之间的数据类型转换是通过cv bridge这个包来实现的 m
  • 编译VINS_Mono报错: Project ‘cv_bridge‘ specifies ‘/usr/include/opencv‘ as an include dir, which is not f

    编译VINS Mono报错 xff1a CMake Error at opt ros melodic share cv bridge cmake cv bridgeConfig cmake 113 Project cv bridge spe
  • Ubuntu 18.04 ROS Melodic中调用支持Python3的cv_bridge

    Ubuntu 18 04 ROS Melodic中调用支持Python3的cv bridge 0 背景1 编译自己的cv bridge功能包 Python 3 7 11 2 更新当前shell的环境变量3 附录Why use source
  • 乐鑫 ESP-IoT-Bridge 方案支持设备灵活入网

    观看视频了解 ESP IoT Bridge 联网方案 乐鑫科技推出 ESP IoT Bridge 联网方案 xff0c 能够为物联网应用场景下的 Wi Fi 蓝牙 Thread 以太网 MCU 等设备 xff0c 提供便捷的网络服务 ESP
  • ROS image_transport及cv_bridge

    ROS image transport 压缩 此外上面提到过FPS这个参数 xff0c 自然少不了介绍图像的压缩 一般使用的时候直接会使用没有压缩的图像 xff0c 但是在需要传输的时候 xff0c 这一些大图像非常占用带宽 xff0c 所
  • ros_arduino_bridge+arduino+l298n控制编码电机(Arduino uno)

    踩了许多坑 xff0c 看了许多教程 xff0c 终于成功用ros arduino桥的方法实现了对电机的控制 xff0c 希望大家能通过我的教训少走一些弯路 注 xff1a 本教程的所有代码可以进入我主页下载 step1 ubuntu下安装
  • socketcan_bridge 包 设置多路CAN口 小记

    参考链接 xff1a socketcan bridge ROS Wiki 基于ROS 43 CANopen的SocketCAN驱动在Ubuntu下的应用说明 SzZhangfq的博客 CSDN博客 ros socketcan socketc
  • Python3 下 ROS 的使用 cv_bridge

    Python 3 下 ROSmsg 转 cv2 项目中用到的 Tensorflow2 4 的环境 xff0c 该环境只支持python3 版本 xff0c 项目中遇到不少需要和 ROS 交互的地方 xff0c 所以不断探索 python3
  • 基于ros_arduino_bridge的智能小车----上位机篇

    基于ros arduino bridge的智能小车 上位机篇 基于ros arduino bridge的智能小车 硬件篇 基于ros arduino bridge的智能小车 下位机篇 ros arduino bridge文件系统 xff08
  • 基于ros_arduino_bridge的智能小车----下位机篇

    基于ros arduino bridge的智能小车 下位机篇 参考文章 xff1a 基于ros arduino bridge的智能小车 上位机篇 基于ros arduino bridge的智能小车 硬件篇 下位机部分实际上可以视作完全独立的
  • iOS编程基础-OC(六)-专家级技巧:使用ARC

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 第6章 专家级技巧 使用ARC 本章是第一部分的最后一章 本章介绍ARC内存管理中的细微之处 如直接桥接对象使用ARC的方法 6 1 ARC和对象所有权 我们已经知道
  • 定义在 Swift 中被视为类的结构

    在斯威夫特String结构也被视为类对象 就像使用NSCoder encodeObject forKey 方法 我确实知道String直接与 Objective C 类桥接 NSString 但是有没有办法定制struct其行为类似 也许将
  • 在图中寻找桥梁 C++ (BOOST)?

    我正在阅读 BOOST 库 注意到他们没有一种算法可以在图中找到桥梁 但他们确实有一个可以找到连接点的算法 无论如何 这可以有效地完成吗 我有个主意 1 使用 BOOST 寻找关节点 2 使用out edges 找到连接每个关节点的所有边

随机推荐

  • 无限“递归”的python程序

    如果一个函数直接或者间接调用了自己 xff0c 那么就形成了递归 xff08 recursion xff09 xff0c 比如斐波那契数列的一个实现 def fib n if n lt 61 2 return 1 else return f
  • FreeRTOS 二值信号量,互斥信号量,递归互斥信号量

    以下转载自安富莱电子 xff1a http forum armfly com forum php 本章节讲解 FreeRTOS 任务间的同步和资源共享机制 xff0c 二值信号量 二值信号量是计数信号量的一种特殊形式 xff0c 即共享资源
  • 替代vnc图像远程工具NOMACHINE

    最近再做关于oracle rac集群的实验 难免要在图像界面下进行操作 以前都用的是vnc 但是vnc貌似比较占资源而已图像质量不是很好 今天无意发现了一个替代VNC的好工具NOMACHINE 它的官方网址是 http www nomach
  • antd-design LocaleProvider国际化

    1 LocaleProvider 使用 React 的 context 特性 xff0c 只需在应用外围包裹一次即可全局生效 import LocaleProvider from 39 antd 39 import zh CN from 3
  • python 读取文件、并以十六进制的方式写入到新文件

    usr bin env python infile 61 file 34 in mp3 34 34 rb 34 outfile 61 file 34 out txt 34 34 wb 34 def main while 1 c 61 inf
  • perl的内置函数scalar

    scalar可以求数组的长度 xff0c 但是 xff0c 在scalar的说明里面并没有这一项 Forces EXPR to be interpreted in scalar context and returns the value o
  • sqlalchemy批量删除数据、全量删除

    问题 xff1a sqlalchemy如何批量删除多条数据 解决 xff1a 使用参数synchronize session 61 False xff0c 或for循环 方法 xff1a users 61 self db query Use
  • 经典的同态滤波算法的优化及其应用参数配置。

    同态滤波 xff0c 网络上有很多文章提到过这个算法 xff0c 我们摘取百度的一段文字简要的说明了该算法的核心 xff1a 同态滤波是一种减少低频增加高频 xff0c 从而减少光照变化并锐化边缘或细节的图像滤波方法 关于该算法 xff0c
  • Trajectory following with MAVROS OFFBOARD on Raspberry Pi

    原文链接 Trajectory following with MAVROS OFFBOARD on Raspberry Pi Jaeyoung Lim August 10 2016 404warehouse Small Projects B
  • 职位介绍 之 嵌入式开发工程师

    笔者电子信息专业硕士毕业 xff0c 获得过多次电子设计大赛 大学生智能车 数学建模国奖 xff0c 现就职于南京某半导体芯片公司 xff0c 从事硬件研发 xff0c 电路设计研究 对于学电子的小伙伴 xff0c 深知入门的不易 xff0
  • Elementui el-dialog 组件我又学会了一种新的用法

    1 新建弹窗Form vue文件 将visible属性设置为true lt template gt lt div gt lt el dialog title 61 34 提示 34 visible 61 34 true 34 width 6
  • webpack系列——实现一个行内样式px转vw的loader

    需求 自从有了postcss来处理css文件 xff0c 我们可以快速进行网站适配的开发 xff0c 只需要改改参数 xff0c 样式按照设计稿的px写 xff0c webpack编译自动转换成rem或者vw等 但是 xff0c 标签内的p
  • Scrapy爬虫 - 获取知乎用户数据

    2016 04 10 Scrapy爬虫 获取知乎用户数据 安装Scrapy爬虫框架 关于如何安装Python以及Scrapy框架 xff0c 这里不做介绍 xff0c 请自行网上搜索 初始化 安装好Scrapy后 xff0c 执行 scra
  • 百度云下载的压缩吧损坏问题解决

    有时用百度云下载压缩包回来之后会出现损坏不能解压的问题 xff0c 比如 xff1a 1 使用网页的批量下载 xff0c 此时百度云会压缩成一个包 xff0c 格式为zip xff0c 而下载下载回来之后用WinRAR解压就会出现CRC校验
  • 理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)

    BPDU Guard xff08 BPDU保护 xff09 xff0c 简单的讲它的意义就是一个不该接收 BPDU的端口 xff0c 比如被启动了 portfast的端口 xff0c 一旦收到 BPDU报文 xff0c 那么 BPDU保护功
  • frida hook java原生算法同时打印调用堆栈

    coding UTF 8 import frida sys jsCode 61 34 34 34 function showStacks Java perform function send Java use 34 android util
  • 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)

    概述 在软件开发系统中 xff0c 客户程序经常会与复杂系统的内部子系统之间产生耦合 xff0c 而导致客户程序随着子系统的变化而变化 那么如何简化客户程序与子系统之间的交互接口 xff1f 如何将复杂系统的内部子系统与客户程序之间的依赖解
  • tld 标签元素

    每个自定义标签都必须在tld文件中声明 xff0c tld文件只不过是一个XML文件 根元素是 lt taglib gt xff0c 它包含一个或者多个 lt tag gt 标签 xff0c 该元素用来声明定制标签 TLD 文件中的元素标签
  • cuda中用cublas库做矩阵乘法

    这里矩阵C 61 A B xff0c 原始文档给的公式是C 61 alpha A B 43 beta C xff0c 所以这里alpha 61 1 xff0c beta 61 0 主要使用cublasSgemm这个函数 xff0c 这个函数
  • cv_bridge中的编码模式与实现

    image encodings cpp文件是关于图像编码模式的源文件 xff0c 其中规定了RGB的图像以及深度图的编码模式 该编码文件image encodings cpp所依赖的头文件图 命令空间 sensor msgs image e