文章目录

  • intel realsense 深度相机深度图像处理API总结
    • 一.导入库文件
    • 二.开启数据流传输
    • 三.获取图像帧数据
    • 四.使用OpenCV显示深度图像和高度图像
    • 五.使用过滤器对图像数据进行后处理
      • 1.深度阈值过滤器 rs2::threshold\_filter
      • 2.高度图像与彩色图像的视野对齐
      • 3.其他过滤器使用方式

intel realsense 深度相机深度图像处理API总结

一.导入库文件

  1. 除高级功能外,其他所有功能都通过以下头文件提供

    #include <librealsense2/rs.hpp> // 除高级功能外,RealSense API其他所有功能都通过此头文件提供
    

二.开启数据流传输

  1. RealSense SDK2.0主要通过管道(pipeline)控制摄像机枚举以及流的处理

    // RealSense SDK2.0主要通过管道(pipeline)控制摄像机枚举以及流的处理
    rs2::pipeline p;
    
  2. 通过配置和启动管道,就可以实现对流的处理

    // 配置并启动管道
    p.start();
    

三.获取图像帧数据

  1. 一旦配置了管道,我们就可以循环等待新的帧,wait_for_frames函数将阻塞程序,直到下一组帧的到达,这里的帧中包含了彩色相机与深度相机等相机采集到的帧数据

    // 阻塞程序,直到获取新的一组帧数据
    rs2::frameset frames = p.wait_for_frames();
    
  2. 要从帧数据中获取相对应的图像,可以使用get_***_frame 函数,其中***可以取color或者depth

    rs2::frame color_frame = frames.get_color_frame(); // 尝试获取一帧彩色图像
    rs2::frame depth_frame = frames.get_depth_frame(); // 尝试获取一帧深度图像,深度图像对象为rs2::frame
    rs2::depth_frame depth_frame = frames.get_depth_frame(); // 尝试获取一帧深度图像,深度图像对象为rs2::depth_frame
  3. 使用rs2::depth_frame获取到的深度帧数据中包含图像的很多基础信息,可以使用get_***()函数获取相对应的信息

    // 获取图像基本信息
    float units = depth_frame.get_units(); // 获取深度图像深度单位
    float width = depth_frame.get_width(); // 获取深度图像宽
    float height = depth_frame.get_height(); // 获取深度图像高
    double timestamp = depth_frame.get_timestamp(); // 获取图像拍摄时间
    unsigned long long frame_number = depth_frame.get_frame_number(); // 获取图像帧号
    float dist_to_center = depth_frame.get_distance(width / 2, height / 2); // 查询相机平面到图像中心中对象的距离
    

四.使用OpenCV显示深度图像和高度图像

  1. 显示彩色图像

    彩色图像只需要在创建OpenCV Mat对象时,将获取到的彩色图像的图像大小和数据的指针给Mat对象即可

    rs2::frame color_frame = frames.get_color_frame(); // 尝试获取一帧彩色图像
    // 将图像数据转换为opencv的Mat类型数据
    cv::Mat frame_color(cv::Size(640, 480), CV_8UC3, (void*)color_frame.get_data(), cv::Mat::AUTO_STEP);
    //显示图像
    cv::imshow("color", frame_color);
    cv::waitKey(1);
    
  2. 显示高度图像

    获取到的高度图像帧需要先进行色彩转换,然后才能进行显示

    1. 创建色彩转换对象,参数可以是0-9(0 - Jet 1 - Classic 2 - WhiteToBlack 3 - BlackToWhite 4 - Bio 5 - Cold 6 - Warm 7 - Quantized 8 - Pattern 9 - Hue)

      // 声明深度着色器以实现深度数据的可视化
      rs2::colorizer color_map(9); //内部参数可以是0-9的任意一个值,代表不同的色彩标记方式
      
    2. 获取高度帧数据时,进行颜色着色,然后转换为OpenCV的Mat对象进行显示

      rs2::frame depth_frame = frames.get_depth_frame().apply_filter(color_map); // 尝试获取一帧深度图像,使用着色器进行着色
      const int w = depth_frame.as<rs2::video_frame>().get_width(); // 获取深度图像宽
      const int h = depth_frame.as<rs2::video_frame>().get_height(); // 获取深度图像高
      cv::Mat frame_depth(cv::Size(w, h), CV_8UC3, (void*)depth_frame.get_data(), cv::Mat::AUTO_STEP);
      // 显示图像
      cv::imshow("depth", frame_depth);
      cv::waitKey(1);

      0 - Jet模式
      1 - Classic模式

      2 - WhiteToBlack模式

      3 - BlackToWhite模式

      4 - Bio模式

      5 - Warm模式

      6 - Cold模式

      7 - Quantized模式

      8 - Pattern模式

      9 - Hue模式

五.使用过滤器对图像数据进行后处理

rs2::frameset为未经过处理的原始数据,也可以通过创建过滤器来对原始数据进行处理,得到想要得数据

1.深度阈值过滤器 rs2::threshold_filter

rs2::threshold_filter thr_filter(0, 1);   // 阈值-删除深度图像中超出建议范围的值
rs2::frameset frames = p.wait_for_frames();  // 阻塞程序直到帧到达
frames = thr_filter.process(frames); // 使用过滤器对图像进行处理
rs2::frame color_frame = frames.get_color_frame(); // 尝试获取一帧彩色图像
rs2::frame depth_frame = frames.get_depth_frame().apply_filter(color_map); // 尝试获取一帧深度图像,使用着色器进行着色
const int w = depth_frame.as<rs2::video_frame>().get_width(); // 获取深度图像宽
const int h = depth_frame.as<rs2::video_frame>().get_height(); // 获取深度图像高// 将图像数据转换为opencv的Mat类型数据
cv::Mat frame_color(cv::Size(640, 480), CV_8UC3, (void*)color_frame.get_data(), cv::Mat::AUTO_STEP);
cv::Mat frame_depth(cv::Size(w, h), CV_8UC3, (void*)depth_frame.get_data(), cv::Mat::AUTO_STEP);//显示图像
cv::imshow("color", frame_color);
cv::imshow("depth", frame_depth);cv::waitKey(1);


2.高度图像与彩色图像的视野对齐

由于硬件原因,左右两侧摄像头与中间的彩色摄像头视角是不一样的,直接输出的高度图像与彩色图像的位置会对不上。如下图,高度摄像头的视野要比彩色摄像头的视野来的广。

所以,需要使用过滤器,对彩色图像或者深度图像进行处理,使两者在空间上进行对齐。对齐使用rs2::align过滤器

rs2::colorizer color_map(0); // 声明深度着色器以实现深度数据的可视化
rs2::align align_to_depth(RS2_STREAM_DEPTH);  // 以深度相机作为视野基准,调整彩色图像
rs2::align align_to_color(RS2_STREAM_COLOR); // 以彩色图像作为视野基准,调整深度图像
frames = align_to_color.process(frames); // 选择一个过滤器,来对齐深度图像与彩色图像的视野
rs2::frame color_frame = frames.get_color_frame(); // 尝试获取一帧彩色图像
rs2::frame depth_frame = frames.get_depth_frame().apply_filter(color_map); // 尝试获取一帧深度图像,使用着色器进行着色
const int w = depth_frame.as<rs2::video_frame>().get_width(); // 获取深度图像宽
const int h = depth_frame.as<rs2::video_frame>().get_height(); // 获取深度图像高// 将图像数据转换为opencv的Mat类型数据
cv::Mat frame_color(cv::Size(w, h), CV_8UC3, (void*)color_frame.get_data(), cv::Mat::AUTO_STEP);
cv::Mat frame_depth(cv::Size(w, h), CV_8UC3, (void*)depth_frame.get_data(), cv::Mat::AUTO_STEP);//进行格式的转换RGB-BGRcv::cvtColor(frame_color, frame_color, cv::COLOR_RGB2BGR);cv::cvtColor(frame_color, frame_color, cv::COLOR_RGB2BGR);//显示图像
cv::imshow("color", frame_color);
cv::imshow("depth", frame_depth);
cv::waitKey(1);


3.其他过滤器使用方式

intel realsense 深度相机深度图像处理API总结相关推荐

  1. 运行Intel realsense L515相机

    运行Intel realsense L515相机 首先去官: https://www.intelrealsense.com/sdk-2/,按照上面的提示安装各种文件,然后输入realsense-vie ...

  2. win10 打开 Intel Realsense R200获取深度和彩色视频流 ,并测试python opencv 获取

    一:win10打开 Intel Realsense  R200 1.python 需3.6或以上,我的是3.7 2.去官网下载https://github.com/IntelRealSense/lib ...

  3. Ubuntu 18.04 Intel RealSense D435i 相机标定教程

    1.D435i相机简介 RealSenseD435i 是一款立体视觉深度相机,如下图所示,其集成了两个红外传感器(IR Stereo Camera).一个红外激光发射器(IR Projector)和一 ...

  4. NVIDIA Xavier NX的Intel Realsense双目相机(T265+D435i)环境搭建

    文章目录 一.硬件部分 二.环境配置 1.安装ROS 2.编译realsense (1)查看版本 (2)编译librealsense (3)编译realsense-ros (4)查看是否安装成功 (5 ...

  5. Intel Realsense D435 关于深度摄像头获取实际深度坐标时的常见问题及可能的解决方案

    20191017 获取深度有时或遇到黑洞,或者取值不准直接"贯穿",导致深度直接扩大.缩小(小概率)或直接为0(当出现黑洞或深度超出可监测范围时就为0),今后可使用如下算法:检测目 ...

  6. ros订阅相机深度信息_基于深度相机 RealSense D435i 的 ORB SLAM 2

    相比于上一篇文章,这里我们将官方给的 rosbag 数据包替换为来自深度相机的实时数据.之所以选择 Intel RealSense 这款深度相机,仅仅是因为它是最容易买到的...在京东上搜" ...

  7. intel realsense D400系列相机介绍(一)

    文章目录 intel realsense D4 2 intel realsense D400介绍 2.3 立体视觉深度技术概述 2.4 摄像机系统框图 2.5 英特尔Intel® RealSense™ ...

  8. kinect深度距离误差_TOF相机深度矫正基于Kinect v2

    之前的文章<answer:深度相机(TOF)矫正>由于时间匆忙,临时想了一种深度相机深度像素矫正方法,即固定高度逐像素矫正.该方法简单粗暴,效果并不理想,最近查阅了相关文献资料,基于之前的 ...

  9. 「 SLAM lesson-1.2 」传感器分类、单目相机、双目相机、深度相机

    结合 高翔老师的著作<视觉SLAM十四讲:从理论到实践>,加上小白的工程经验共同完成.建议作为笔记功能反复使用. 一.用于定位的传感器分类 主要分成两类:         1). 传感器携 ...

最新文章

  1. 设置tomcat使用指定的jdk版本
  2. Redis学习笔记(八)——持久化
  3. vue引入vue-amap
  4. SAP CRM and C4C PDF print
  5. 一些总是记不住又容易搞混淆的东西(不断更新)
  6. OpenCV辅助对象(help objects)(2)_Range
  7. DockOne微信分享(一三一):Juice——一种基于MesosFramework的任务云框架
  8. java制作网站的原理_代码生成器原理
  9. mongodb for java_【MongoDB for Java】Java操作MongoDB
  10. mysql优于oracle的地方_MYSQL转为ORACLE要注意的地方
  11. Linux之squirrelmail小松鼠客户端搭建
  12. 计算机房加湿机,数据中心加湿系统计算及方法探讨【新规范加湿方式对比及计算分析】...
  13. 通过hive将excel文件_hive 之 将excel数据导入hive中 : excel 转 txt
  14. 【saas公司案例】易快报与浦发云资金
  15. python——设置渐变色
  16. 很好用的邮件发送软件mutt
  17. oracle11g本地安装,windows64位机oracle11g+pl/sql安装教程图解
  18. 诺瓦科技2022数字IC设计提前批笔试
  19. RabbitMq报错 Execution of Rabbit message listener failed
  20. python exec 函数_Python之浅谈exec函数

热门文章

  1. 用聊天机器人假扮人类
  2. 为什么 ERP 系统的用户体验不好?
  3. 好用的报表分析软件有哪些?
  4. 在SAR-Opt数据融合领域针对深度学习的SEN1-2数据集
  5. java常见面试题库大全
  6. 微信小程序——API promise化,全局数据共享,MobX,将Stroe中的成员绑定到页面中,在页面上使用Strore中的成员
  7. Git连接远程仓库(私有/公开仓库),克隆代码
  8. 民谣与2017年终总结
  9. 基于html5的数据可视化实现方法研究,基于HTML5的数据可视化实现方法研究
  10. 仙人掌之歌——坑,各种坑(2)