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", , &ImageConverter::imageCb, this);
image_pub_ = it_.advertise("/image_converter/output_video", ); 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 > && cv_ptr->image.cols > )
cv::circle(cv_ptr->image, cv::Point(, ), , CV_RGB(,,)); //画圆 // Update GUI Window
cv::imshow(OPENCV_WINDOW, cv_ptr->image);
cv::waitKey(); // 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 ;
}

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

从中我们可以看得处深度图使用cv_bridge进行转换与RGB图之间的转换为OPENCV可处理的结构基本上类似,但是最重要的就是编码的模式的正确,所以这是非常关键的
为了使用深度图与RGB的图生成点云,所以我们需要对深度图使用正确的编码模式,具体的代码我就不再展示了,
那么我们可以看一下,对于不同的编码模式生成点云之间的区别
看起来就好像断层了一样,但是如果配合正确的编码的模式效果就不是这样的了,所以在使用cv_bridge的时候选择正确的编码模式是非常重要的,
暂时就更新到这里了,如果有问题可以直接评论,或者关注微信公众号,或者加入QQ交流群与更多的人交流

                           

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

  1. python中的编码问题:以ascii和unicode为主线

      1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8 ...

  2. 理解javascript中的策略模式

    理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效 ...

  3. 【省带宽、压成本专题】深入解析 H.265 编码模式,带你了解 Apple 全面推进 H.265 的原因

    过去几年,又拍云一直在点播.直播等视频应用方面潜心钻研,取得了不俗的成果.我们结合点播.直播.短视频等业务中的用户场景,推出了"省带宽.压成本"系列文章,从编码技术.网络架构等角度 ...

  4. Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?

    [梁海的回答(99票)]: 简答.一些细节暂无精力查证,如果说错了还请指出. 一句话建议:涉及兼容性考量时,不要用记事本,用专业的文本编辑器保存为不带 BOM 的UTF-8. * * * 如果是为了跨 ...

  5. 【转】【Python】 python中的编码问题报错 'ascii' codec can't decode 及 URL地址获取中文

    1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8是u ...

  6. 转 python3中SQLLIT编码与解码之Unicode与bytes

    #########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...

  7. 002-创建型-04-建造者模式(Builder)、JDK1.7源码中的建造者模式、Spring中的建造者模式

    一.概述 建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象 ...

  8. React中render Props模式

    React组件复用 React组件复用的方式有两种: 1.render Props模式 2.高阶组件HOC 上面说的这两种方式并不是新的APi. 而是利用Raect自身的编码特点,演化而来的固定编码写 ...

  9. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

随机推荐

  1. spring 项目中使用 hibernate validator验证输入参数

    1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...

  2. FIR特性及仿真实现_01

    作者:桂. 时间:2018-02-05  19:01:21 链接:http://www.cnblogs.com/xingshansi/p/8419007.html 前言 本文主要记录FIR(finit ...

  3. SpringBoot actuator 应用监控。

    前言 : 今天在阅读 <SpringCloud微服务实战>一书时看到了SpringBoot actuator相关知识,并且自己也本地调试实践.觉得SpringBoot这一套监控还是挺有意思 ...

  4. Ultraedit使用小技巧

    4. 编辑文件如何加入时间戳 ?F7 快捷键即可.你试试看? 5. 为何拷贝(Copy)/粘贴(Paste)功能不能用了?不怕大家笑话,我有几次使用 UltraEdit的过程中发现拷贝与粘贴的内容是不 ...

  5. 第7讲 SPI和RAM IP核

    学习目的: (1) 熟悉SPI接口和它的读写时序: (2) 复习Verilog仿真语句中的$readmemb命令和$display命令: (3) 掌握SPI接口写时序操作的硬件语言描述流程(本例仅以写 ...

  6. [svc]mount命令及解决因/etc/fstab错误导致系统不能启动故障

    mount命令-手动挂载设备 格式: mount [options] [-t fstype] [-o option] 设备 挂载点 mount -n -o remount,rw / - Mount t ...

  7. vue-cli 本地数据模拟

    方法一: 使用express搭建静态服务 mock数据写在json文件中,proxyTable 里将接口代理到具体mock数据json文件上.具体方法: 创建 mock 文件夹 build/dev-s ...

  8. Android 网络请求get/post工具类:NetUtil

    package com.net.util;   import java.io.IOException; import java.io.UnsupportedEncodingException; imp ...

  9. 【Java】Java复习笔记-第四部分

    反射 反射: 在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...

  10. Android下基于SDL的位图渲染(二)理论篇

    理论篇 上一篇中介绍了如何将SDL2源码应用到Android渲染中,实际上SDL本身提供的android-project实现了基于android的c运行时环境,通过上面实践篇的介绍,就是完成这个环境搭 ...