cv_bridge中的编码模式与实现
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中的编码模式与实现的更多相关文章
- python中的编码问题:以ascii和unicode为主线
1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8 ...
- 理解javascript中的策略模式
理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效 ...
- 【省带宽、压成本专题】深入解析 H.265 编码模式,带你了解 Apple 全面推进 H.265 的原因
过去几年,又拍云一直在点播.直播等视频应用方面潜心钻研,取得了不俗的成果.我们结合点播.直播.短视频等业务中的用户场景,推出了"省带宽.压成本"系列文章,从编码技术.网络架构等角度 ...
- Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?
[梁海的回答(99票)]: 简答.一些细节暂无精力查证,如果说错了还请指出. 一句话建议:涉及兼容性考量时,不要用记事本,用专业的文本编辑器保存为不带 BOM 的UTF-8. * * * 如果是为了跨 ...
- 【转】【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 ...
- 转 python3中SQLLIT编码与解码之Unicode与bytes
#########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...
- 002-创建型-04-建造者模式(Builder)、JDK1.7源码中的建造者模式、Spring中的建造者模式
一.概述 建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象 ...
- React中render Props模式
React组件复用 React组件复用的方式有两种: 1.render Props模式 2.高阶组件HOC 上面说的这两种方式并不是新的APi. 而是利用Raect自身的编码特点,演化而来的固定编码写 ...
- 制作类似ThinkPHP框架中的PATHINFO模式功能
一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...
随机推荐
- Xilinx 常用模块汇总(verilog)【01】
作者:桂. 时间:2018-05-07 19:11:23 链接:http://www.cnblogs.com/xingshansi/p/9004492.html 前言 该文私用,不定期更新,主要汇总 ...
- Java:concurrent包下面的Map接口框架图(ConcurrentMap接口、ConcurrentHashMap实现类)
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- SQLMap 学习
注入完整流程:http://mp.weixin.qq.com/s/G_DUUVuPH9DeWagjELCPfA sqlmap命令:http://www.cnblogs.com/handt/p/855f ...
- iOS上的http请求:get、post以及同步、异步
1.get: view sourceprint" class="item about" style="color:rgb(51,51,51); text-dec ...
- 译:1. 初识 Apache Axis2
欢迎使用Apache Axis2 / Java Apache Axis2 是一个Web Service SOAP / WSDL 引擎,它被广泛用于Apache Axis SOAP 栈. Apache ...
- scrollReveal.js页面滚动动态效果
scrollReveal.jshttp://www.dowebok.com/134.html简介 和 WOW.js 一样,scrollReveal.js 也是一款页面滚动显示动画的 JavaScrip ...
- android:clipChildren 属性
这个属性默认为true: 两个用法: 1.设置为false ,使用ViewPager 的时候能够 实现一屏上显示多个Item 2.动画能越界
- HTML5 History API让ajax能回退到上一页
HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL.这个功能很有用,例如通过一段JavaScript代码局部加载页面的内容,你希望通过改变当前页面的 ...
- 什么是UML?分哪两类?
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言.UML为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言 ...
- android studio - Manifest merger failed with multiple errors, see logs
今天编译运行的时候遇到了“Error:Execution failed for task ':test:processDebugManifest'.> Manifest merger faile ...