ROS 订阅RealsenseD435图像与opencv保存32位深度图像

2023-05-16

一,通过ros订阅realsense图像

int main(int argc, char **argv)
{
    ros::init(argc, argv, "image_listener");
    ros::NodeHandle nh;
    cv::namedWindow("view");
    cv::startWindowThread();
    message_filters::Subscriber<sensor_msgs::Image> image_sub(nh, "/camera/color/image_raw", 1);
    message_filters::Subscriber<sensor_msgs::Image> info_sub(nh, "/camera/aligned_depth_to_color/image_raw", 1);
    message_filters::TimeSynchronizer<sensor_msgs::Image, sensor_msgs::Image> sync(image_sub, info_sub, 10);
    sync.registerCallback(boost::bind(&callback, _1, _2));
    ros::spin();
    cv::destroyWindow("view");

}

这里使用了message_filters,用于将彩色图像和深度图像设置同一个回调函数,也就是在回调函数里,可以同时取得彩色图与深度图的数据

二,将图像转换为opencv的Mat并获取指针

    cv_bridge::CvImagePtr color_ptr, depth_ptr;
    cv::Mat color_pic, depth_pic;
    color_ptr = cv_bridge::toCvCopy(color, sensor_msgs::image_encodings::BGR8);
    color_pic = color_ptr->image;
    depth_ptr = cv_bridge::toCvCopy(depth, sensor_msgs::image_encodings::TYPE_32FC1);
    depth_pic = depth_ptr->image;

三,保存图像

深度图的格式是32FC1,直接使用imwrite会保存为8U的格式。这里有两种方法可以保存32FC1图像。

1,将图像保存为TIF格式

std::string droadtif="/home/project/myimage/all/depth+"+std::string(tmp)+".tif";
cv::imwrite(droadtif,depth_pic);

在读取的时候使用下面代码读取:

cv::Mat depthtif = imread("/home/project/myimage/depth1.tif",IMREAD_UNCHANGED);//UNCHANGED是重点
cout<<"tif center point"<<depthtif.at<float>(240,320)<<endl;//显示中心深度

2,将图像保存为8UC4的PNG格式

Mat dep8u(depth_pic.rows,depth_pic.cols,CV_8UC4,depth_pic.data);
std::vector<int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
Mat depth832(depth_pic.rows,depth_pic.cols,CV_32FC1,dep8u.data);
cout<<"depth832 center point"<<depth832.at<float>(240,320)<<endl;

std::string droad="/home/project/myimage/all/depth+"+std::string(tmp)+".png";
cv::imwrite(droad,dep8u,compression_params);

在读取的时候使用下面代码读取

cv::Mat depth1 = imread("/home/project/myimage/depth1.png",IMREAD_UNCHANGED);
Mat depth32(depth_pic.rows,depth_pic.cols,CV_32FC1,depth1.data);//8UC4转32FC1

四,完整代码

代码实时接收realsense图像,并实时显示点云+深度图+彩色图


#include <time.h>
#include <iostream>

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <message_filters/subscriber.h>
#include <message_filters/time_synchronizer.h>
// PCL 库
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/visualization/cloud_viewer.h>
using namespace  cv;
typedef pcl::PointCloud<pcl::PointXYZRGB> PointCloud;
pcl::visualization::CloudViewer viewer("Cloud Viewer: Rabbit");     //创建viewer对象
// 相机内参
const double camera_factor = 1000;
const double camera_cx = 312.7254638671875;
const double camera_cy = 231.78810119628906;
const double camera_fx = 602.482177734375;
const double camera_fy = 601.5348510742188;

void callback(const sensor_msgs::ImageConstPtr& color, const sensor_msgs::ImageConstPtr& depth)
{
    //ROS_INFO("RECEIVE Image...");
//    try
//    {
//        cv::imshow("view", cv_bridge::toCvShare(color, "bgr8")->image);
//    }
//    catch (cv_bridge::Exception& e)
//    {
//        ROS_ERROR("Could not convert from '%s' to 'bgr8'.", color->encoding.c_str());
//    }
//    try
//    {
//        //cv::imshow("depthview", cv_bridge::toCvShare(depth, "16UC1")->image);
//        cv::imshow("depthview", cv_bridge::toCvShare(depth, sensor_msgs::image_encodings::TYPE_32FC1)->image);
//    }
//    catch (cv_bridge::Exception& e)
//    {
//        ROS_ERROR("Could not convert from '%s' to '16UC1'.", depth->encoding.c_str());
//    }

    //ointCloud
    cv_bridge::CvImagePtr color_ptr, depth_ptr;
    cv::Mat color_pic, depth_pic;
    color_ptr = cv_bridge::toCvCopy(color, sensor_msgs::image_encodings::BGR8);
    color_pic = color_ptr->image;
    depth_ptr = cv_bridge::toCvCopy(depth, sensor_msgs::image_encodings::TYPE_32FC1);
    depth_pic = depth_ptr->image;
    //cout<<"channels"<<depth_pic.depth()<<endl;

    PointCloud::Ptr cloud ( new PointCloud );

    for (int m = 0; m < depth_pic.rows; m++){
        for (int n = 0; n < depth_pic.cols; n++){
            // 获取深度图中(m,n)处的值
            if(depth_pic.ptr<float>(m)[n]>4096)
                depth_pic.ptr<float>(m)[n]=0;//depth filter
            float d = depth_pic.ptr<float>(m)[n];//ushort d = depth_pic.ptr<ushort>(m)[n];
            // d 可能没有值,若如此,跳过此点
            if (d == 0)
                continue;
            // d 存在值,则向点云增加一个点
            pcl::PointXYZRGB p;

            // 计算这个点的空间坐标
            p.z = double(d) / camera_factor;
//            if(m==(int)(depth_pic.rows/2)&&n==(int)(depth_pic.cols/2))
//                cout<<double(d)<<endl;
            p.x = (n - camera_cx) * p.z / camera_fx;
            p.y = (m - camera_cy) * p.z / camera_fy;

            // 从rgb图像中获取它的颜色
            // rgb是三通道的BGR格式图,所以按下面的顺序获取颜色
            p.b = color_pic.ptr<uchar>(m)[n*3];
            p.g = color_pic.ptr<uchar>(m)[n*3+1];
            p.r = color_pic.ptr<uchar>(m)[n*3+2];

            // 把p加入到点云中
            cloud->points.push_back( p );
        }
    }

    cv::imshow("view", color_pic);
    cv::imshow("depthview", depth_pic);
    viewer.showCloud(cloud);

    char c = (char)cv::waitKey(50);//得到键值
    static bool startsave=false;
    if (c == 'h')
    {
        startsave = true;
        ROS_INFO("Start write Image...");
    }
    if(c=='f')
    {
        startsave= false;
        ROS_INFO("Stop write Image...");
    }
    if(startsave||c == 'a')
    {
        time_t t = time(NULL);
        struct tm* stime=localtime(&t);
        char tmp[32]{0};
        snprintf(tmp,sizeof(tmp),"%04d%02d%02d%02d%02d%02d",1900+stime->tm_year,1+stime->tm_mon,stime->tm_mday, stime->tm_hour,stime->tm_min,stime->tm_sec);
        cout<<tmp<<endl;
//        cout<<depth_pic.channels()<<endl;
//        cout<<depth_pic.depth()<<endl;
        cout<<"d center point"<<depth_pic.at<float>(240,320)<<endl;
        std::string croad="/home/project/myimage/all/color+"+std::string(tmp)+".png";
        std::string droad="/home/project/myimage/all/depth+"+std::string(tmp)+".png";
        std::string droadtif="/home/cq/project/myimage/all/depth+"+std::string(tmp)+".tif";
//        std::string croad="/home/project/myimage/color1.png";
//        std::string droad="/home/project/myimage/depth1.png";
//        std::string droadtif="/home/project/myimage/depth1.tif";
        cv::imwrite(croad,color_pic);//

        //********************************
        Mat dep8u(depth_pic.rows,depth_pic.cols,CV_8UC4,depth_pic.data);
        std::vector<int> compression_params;
        compression_params.push_back(IMWRITE_PNG_COMPRESSION);
        compression_params.push_back(9);
        Mat depth832(depth_pic.rows,depth_pic.cols,CV_32FC1,dep8u.data);
        cout<<"depth832 center point"<<depth832.at<float>(240,320)<<endl;

        //***save depth

        cv::imwrite(droad,dep8u,compression_params);
        cv::imwrite(droadtif,depth_pic);
        //evluate ***********
//        cv::Mat depth1 = imread("/home/cq/project/myimage/depth1.png",IMREAD_UNCHANGED);
//        Mat depth32(depth_pic.rows,depth_pic.cols,CV_32FC1,depth1.data);
//
//        cout<<depth32.channels()<<endl;
//        cout<<depth32.depth()<<endl;
//        cout<<"d center point"<<depth32.at<float>(240,320)<<endl;
//
//        cv::Mat depthtif = imread("/home/cq/project/myimage/depth1.tif",IMREAD_UNCHANGED);
//        cout<<"tif center point"<<depthtif.at<float>(240,320)<<endl;
        ROS_INFO("write Image...");
    }
    color_pic.release();
    depth_pic.release();

}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "image_listener");
    ros::NodeHandle nh;
    cv::namedWindow("view");
    cv::startWindowThread();
    message_filters::Subscriber<sensor_msgs::Image> image_sub(nh, "/camera/color/image_raw", 1);
    message_filters::Subscriber<sensor_msgs::Image> info_sub(nh, "/camera/aligned_depth_to_color/image_raw", 1);
    message_filters::TimeSynchronizer<sensor_msgs::Image, sensor_msgs::Image> sync(image_sub, info_sub, 10);
    sync.registerCallback(boost::bind(&callback, _1, _2));
    ros::spin();
    cv::destroyWindow("view");

}
 catkin_create_pkg visionrobot sensor_msgs cv_bridge roscpp std_msgs image_transport
cmake_minimum_required(VERSION 3.0.2)
project(visionrobot)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  sensor_msgs
  std_msgs
)
find_package(OpenCV REQUIRED)
find_package(PCL 1.10 REQUIRED)
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES visionrobot
#  CATKIN_DEPENDS cv_bridge image_transport roscpp sensor_msgs std_msgs
#  DEPENDS system_lib
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)
include_directories(include ${OpenCV_INCLUDE_DIRS})
include_directories(include ${PCL_INCLUDE_DIRS})
include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(imageSubscriber src/imageSubscriber.cpp)
target_link_libraries(imageSubscriber ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${PCL_LIBRARIES} )

<?xml version="1.0"?>
<package format="2">
  <name>visionrobot</name>
  <version>0.0.0</version>
  <description>The visionrobot package</description>

  <!-- One maintainer tag required, multiple allowed, one person per tag -->
  <!-- Example:  -->
  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  <maintainer email="xx@todo.todo">cq</maintainer>


  <!-- One license tag required, multiple allowed, one license per tag -->
  <!-- Commonly used license strings: -->
  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
  <license>TODO</license>


  <!-- Url tags are optional, but multiple are allowed, one per tag -->
  <!-- Optional attribute type can be: website, bugtracker, or repository -->
  <!-- Example: -->
  <!-- <url type="website">http://wiki.ros.org/visionrobot</url> -->


  <!-- Author tags are optional, multiple are allowed, one per tag -->
  <!-- Authors do not have to be maintainers, but could be -->
  <!-- Example: -->
  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->


  <!-- The *depend tags are used to specify dependencies -->
  <!-- Dependencies can be catkin packages or system dependencies -->
  <!-- Examples: -->
  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
  <!--   <depend>roscpp</depend> -->
  <!--   Note that this is equivalent to the following: -->
  <!--   <build_depend>roscpp</build_depend> -->
  <!--   <exec_depend>roscpp</exec_depend> -->
  <!-- Use build_depend for packages you need at compile time: -->
  <!--   <build_depend>message_generation</build_depend> -->
  <!-- Use build_export_depend for packages you need in order to build against this package: -->
  <!--   <build_export_depend>message_generation</build_export_depend> -->
  <!-- Use buildtool_depend for build tool packages: -->
  <!--   <buildtool_depend>catkin</buildtool_depend> -->
  <!-- Use exec_depend for packages you need at runtime: -->
  <!--   <exec_depend>message_runtime</exec_depend> -->
  <!-- Use test_depend for packages you need only for testing: -->
  <!--   <test_depend>gtest</test_depend> -->
  <!-- Use doc_depend for packages you need only for building documentation: -->
  <!--   <doc_depend>doxygen</doc_depend> -->
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>cv_bridge</build_depend>
  <build_depend>image_transport</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>sensor_msgs</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>cv_bridge</build_export_depend>
  <build_export_depend>image_transport</build_export_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>sensor_msgs</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>cv_bridge</exec_depend>
  <exec_depend>image_transport</exec_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>sensor_msgs</exec_depend>
  <exec_depend>std_msgs</exec_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

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

ROS 订阅RealsenseD435图像与opencv保存32位深度图像 的相关文章

  • Android Fragment退出 返回上一个Fragment与直接退出

    例如应用底部有两个导航按钮A与B xff0c 刚进入的时候显示为第一个AFragment xff0c 点击B切换到BFragment 如果需求是在BFragment点击返回键回到AFragment xff0c 需要配置 app defaul
  • Android基础 -- 子线程可以修改UI吗?

    子线程可以修改UI吗 xff1f 为什么会产生这样的问题 xff0c 可能是因为在开发过程中遇到了 34 Only the original thread that created a view hierarchy can touch it
  • leetcode 417. 太平洋大西洋水流问题

    https leetcode cn com problems pacific atlantic water flow 思路是从海洋开始逆流 如果可以逆流到 就标记为1 然后检查两个海洋都可以逆流到的区域 DFS public List lt
  • Android模拟器检测常用方法

    在Android开发过程中 xff0c 防作弊一直是老生常谈的问题 xff0c 而模拟器的检测往往是防作弊中的重要一环 xff0c 接下来有关于模拟器的检测方法 xff0c 和大家进行一个简单的分享 1 传统的检测方法 传统的检测方法主要是
  • RecyclerView 隐藏部分分割线

    在项目中遇到复杂点的RecyclerView xff0c 可能会有隐藏部分分割线的需求 xff0c 例如item1和item3之间的分割线隐藏 xff0c item4和item5之间的分割线隐藏等 在看了文档里的ItemDecoration
  • 浅谈去中心化应用

    1 中心化应用 现在我们所使用的应用基本上都是中心化的应用 xff0c 什么是中心化应用呢 xff0c 举个栗子 xff0c 我们在天猫买东西的时候 xff0c 需要先付款给支付宝 xff0c 然后卖家发货 xff0c 我们确认收货之后 x
  • Java二分搜索树及其添加删除遍历

    对于树这种结构 xff0c 相信大家一定耳熟能详 xff0c 二叉树 二分搜索树 AVL树 红黑树 线段树 Trie等等 xff0c 但是对于树的应用以及编写一棵解决特定问题的树 xff0c 不少同学都会觉得不是一件简单的事情 xff0c
  • 游戏平台SDK设计和开发之旅——XSDK功能点梳理

    做游戏开发或者相关工作的同学 xff0c 可能都知道 xff0c 在游戏上线之前 xff0c 需要将游戏分发到各大渠道平台 xff0c 比如九游 xff0c 百度 xff0c 360 xff0c 华为等等 其中和技术相关的事情 xff0c
  • 谈谈 GitHub 开放私有仓库一事的影响

    GitHub 此次宣布免费开放私有仓库 xff0c 在我看来有以下几点影响 xff1a 缓和与同类产品间的竞争压力小部分个人项目由开源转闭源微软在技术社区中的企业形象进一步强化为未来的企业服务预热 下面根据以上几点 xff0c 我来简单谈下
  • 每天坚持刷 LeetCode 的人,究竟会变得有多强... 学习技巧都藏在这几个公众号里面了......

    信息爆炸时代 xff0c 与其每天被各种看过就忘的内容占据时间 xff0c 不如看点真正对你有价值的信息 xff0c 下面小编为你推荐几个高价值的公众号 xff0c 它们提供的信息能真正提高你生活的质量 人工智能爱好者社区 专注人工智能 机
  • 超酷炫!智能无人机中文教程重磅上线!

    前 言 对于大多数无人机爱好者来说 xff0c 能自己从头开始组装一台无人机 xff0c 之后加入 AI 算法 xff0c 能够航拍 xff0c 可以目标跟踪 xff0c 是心中的梦想 并且 xff0c 亲自从零开始完成复杂系统 xff0c
  • B 站硬件大佬又在 GitHub 上开源了一款神器...

    公众号关注 GitHubDaily 设为 星标 xff0c 每天带你逛 GitHub xff01 转自量子位 这次 xff0c 野生钢铁侠稚晖君带着他的硬核项目又来了 上次自制纯手工打造 AI 小电视 xff0c 播放量就超过 300 万
  • 用 C 语言来刷 LeetCode,网友直呼:那是真的牛批...

    公众号关注 GitHubDaily 设为 星标 xff0c 每天带你逛 GitHub xff01 大家好 xff0c 我是小 G 如果你是计算机科班出身 xff0c 那么 C 语言 xff0c 估计是你在初入编程时 xff0c 最早接触的编
  • 【pytorch torchvision源码解读系列—3】Inception V3

    框架中有一个非常重要且好用的包 xff1a torchvision xff0c 顾名思义这个包主要是关于计算机视觉cv的 这个包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets torchvisi
  • 【pytorch torchvision源码解读系列—5】DenseNet

    pytorch框架中有一个非常重要且好用的包 xff1a torchvision xff0c 顾名思义这个包主要是关于计算机视觉cv的 这个包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets to
  • Eclipse使用JDBC方式连接SQLServer2016

    Eclipse使用JDBC方式连接SQLServer2016 今天下午在查找很多JDBC连接SQL时发现大多数都是2012甚至更久以前的版本 xff0c 所以就此把步骤记录下来 xff0c 以免自己下次使用又忘记了 在连接的时候 xff0c
  • 魔改《自动化学报》Latex模板

    想用latex写一个中文文档 xff0c 看上了 自动化学报 的模板 xff0c 感觉不错 xff0c 下载下来在本地的tex live上编译 xff0c 报了一大串错 xff1b 上传到overleaf xff0c 还是报错 xff1b
  • TX2安装jetpack

    目前官网支持的下载为JetPack L4T 3 2 1 linux x64 b23和JetPack L4T 3 3 linux x64 b39 首先使用具有Ubuntu16 04的host主机 xff08 我使用的是个人笔记本 xff0c
  • TF-IDF算法

    TF IDF算法 TF IDF term frequency inverse document frequency 是一种用于信息检索与数据挖掘的常用加权技术 xff0c 常用于挖掘文章中的关键词 xff0c 而且算法简单高效 xff0c
  • 大数据009——MapReduce

    分布式离线计算框架MapReduce MapReduce是一种编程模型 Hadoop MapReduce采用Master slave 结构 只要按照其编程规范 xff0c 只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序

随机推荐

  • MapReduce实例——wordcount(单词统计)

    1 MR实例开发整体流程 最简单的MapReduce应用程序至少包含 3 个部分 xff1a 一个 Map 函数 一个 Reduce 函数和一个 main 函数 在运行一个mapreduce计算任务时候 xff0c 任务过程被分为两个阶段
  • MapReduce实例——好友推荐

    1 实例介绍 好友推荐算法在实际的社交环境中应用较多 xff0c 比如qq软件中的 你可能认识的好友 或者是Facebook中的好友推介 好友推荐功能简单的说是这样一个需求 xff0c 预测某两个人是否认识 xff0c 并推荐为好友 xff
  • Hadoop源码分析——JobClient

    1 MapReduce作业处理过程概述 当用户使用Hadoop的Mapreduce计算模型来进行处理问题时 xff0c 用户只需要定义所需的Mapper和Reduce处理函数 xff0c 还有可能包括的Combiner Comparator
  • 大数据010——Hive

    1 Hive 概述 Hive 是建立在 Hadoop 上的数据仓库基础构架 它提供了一系列的工具 xff0c 可以用来进行数据提取转化加载 xff08 ETL xff09 xff0c 这是一种可以存储 查询和分析存储在 Hadoop 中的大
  • 大数据011——Sqoop

    1 Sqoop 概述 Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具 它是用来从关系数据库如 xff1a MySQL xff0c Oracle到Hadoop的HDFS xff0c 并从Hadoop的文件系统导出数据到关系数
  • 大数据012——HBase

    1 HBase 简介 HBase Hadoop Database xff0c 是一个高可靠性 高性能 面向列 可伸缩 实时读写的分布式数据库 xff1b 在Hadoop生态圈中 xff0c 它是其中一部分且利用Hadoop HDFS作为其文
  • Hadoop源码分析——MapReduce输入和输出

    Hadoop中的MapReduce库支持集中不同的格式的输入数据 例如 xff0c 文本模式的输入数据的每一行被视为一个key value键值对 key是文件的偏移量 xff0c value是那一行的内容 另一种常见的格式是以key进行排序
  • 大数据013——Flume

    1 Flume 简介 Flume是由Cloudera软件公司提供的一个高可用的 xff0c 高可靠的 xff0c 分布式的海量日志采集 聚合和传输的系统 xff0c 后与2009年被捐赠了apache软件基金会 xff0c 为hadoop相
  • Hadoop源码分析——计算模型MapReduce

    MapReduce 是一个计算模型 xff0c 也是一个处理和生成超大数据集的算法模型的相关实现 用户首先创建一个Map函数处理一个基于key value pair的数据集合 xff0c 输出中间的基于 key value pair 的数据
  • 从SDLC到DevSecOps的转变

    OSSTMM 根据开源安全测试方法手册OSSTMM Open Source Security Testing Methodology Manual 的表述 安全测试包括但不限于以下几种做法 漏洞扫描 安全扫描 渗透测试 风险评估 安全审核
  • 大数据014——Storm 简介及入门案例

    分布式实时数据处理框架 Storm 1 Storm简介与核心概念 1 1 Storm 简介 全称为 Apache Storm xff0c 是一个分布式实时大数据处理系统 它是一个流数据框架 xff0c 具有最高的获取率 它比较简单 xff0
  • Hive与HBase整合详解

    参考之前小节的大数据010 Hive与大数据012 HBase成功搭建Hive和HBase的环境 xff0c 并进行了相应的测试 xff0c 并且在大数据011 Sqoop中实现Hive HBase与MySQL之间的相互转换 xff1b 本
  • 大数据015——Elasticsearch基础

    1 Elasticsearch 简介 Elasticsearch是一个基于Lucene的实时的分布式搜索和分析 引擎 设计用于云计算中 xff0c 能够达到实时搜索 xff0c 稳定 xff0c 可靠 xff0c 快速 xff0c 安装使用
  • 大数据015——Elasticsearch深入

    1 Elasticsearch 核心概念 1 1 cluster 代表一个集群 xff0c 集群中有多个节点 xff0c 其中有一个为主节点 xff0c 这个主节点是可以通过选举产生的 xff0c 主从节点是对于集群内部来说的 es的一个重
  • 大数据014——Storm 集群及入门案例

    分布式实时数据处理框架 Storm 1 Storm 集群 1 1 Storm 版本变更 版本编写语言重要特性HA 高可用0 9 xjava 43 clojule改进与Kafka HDFS HBase的集成不支持 xff0c storm集群只
  • 大数据016——Kafka

    1 Kafka 简介 Kafka 是一个高吞吐量 低延迟分布式的消息队列系统 kafka 每秒可以处理几十万条消息 xff0c 它的延迟最低只有几毫秒 Kafka 也是一个高度可扩展的消息系统 xff0c 它在LinkedIn 的中央数据管
  • 大数据017——Scala基础

    Scala 是一门以 java 虚拟机 xff08 JVM xff09 为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言 你可以使用Scala 编写出更加精简的程序 xff0c 同时充分利用并发的威力 由于scala
  • 大数据017——Scala进阶

    Scala 基础语法 第二阶段 1 类和对象 1 1 类 1 xff09 简单类和无参方法 如下定义Scala类最简单形式 xff1a class Counter private var value 61 0 必须初始换字段 def inc
  • 大数据018——Spark(一)

    1 Spark 数据分析简介 1 1 Spark 是什么 Spark 是一个用来实现快速而通用的集群计算的平台 在速度方面 xff0c Spark 扩展了广泛使用的 MapReduce 计算模型 xff0c 而且高效地支持更多计算模式 xf
  • ROS 订阅RealsenseD435图像与opencv保存32位深度图像

    一 xff0c 通过ros订阅realsense图像 int main int argc char argv ros init argc argv 34 image listener 34 ros NodeHandle nh cv name