Intel RealSense学习之图像及图像深度数据获取

图像深度估计的一些基本概念 1.什么是图像深度估计? 2.图像深度估计的方法?(RGB,RGBD,激光雷达) 3.图像深度估计的意义? 阅读详情

本文将介绍如何获取到彩色图像的深度信息。
大家都知道我们可以从realsense 摄像头中获取到RGB数据,红外数据,以及图像的深度数据。至于图像的深度数据我的理解是realsense摄像投抓到的图像的相关距离信息,具体点 可以理解成摄像头距离每个像素点的距离。这个深度数据在某些场景下非常的有意义。本文从之前两篇文章的基础上介绍如何在QT + OpenCV的环境下获取到RGB图像并且拿到深度信息。

主要分以下三个部分
-* RealSense 摄像头操作类的封装*
-* OpenCV Mat与QImage 之间的转换*
-* Realsense 深度数据的获取*

RealSense 摄像头操作类的封装

我们使用一个c++类来封装对librealsense的操作:

#ifndef RSDEVICE_H
#define RSDEVICE_H
#include <librealsense/rs.hpp>
#include <QString>

class rsdevice
{
public:
    rs::context ctx;
    rs::device * dev;
    int devCount;
    QString devName;
    QString devSerial;
    QString devFwVersion;
    QString devCamType;
    QString devIspFwVersion;
    bool streamEnable;

public:
    QString getDevName(){
        return devName;
    }

    QString getDevSerial(){
        return devSerial;
    }

    QString getDevFwVersion(){
        return devFwVersion;
    }

    QString getCamType(){
        return devCamType;
    }

    QString getIspFwVersion(){
        return devIspFwVersion;
    }

public:
    rsdevice();
    ~rsdevice();
    void initRsDevice();
    void enableStream();
    uchar * getFrameData();
    bool isSteamEnable();
    float getDistance(int x,int y);
};

#endif // RSDEVICE_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

上面一堆获取realsense camera 属性的函数,暂时可以忽略,最主要的是initRsDevice(),enableStream(),getFrameData(),getDistance(),四个函数。

初始化realsense 摄像头

void rsdevice::initRsDevice()
{
 devCount = ctx.get_device_count();

 dev = ctx.get_device(0);
.....................
.....................
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

开启摄像头数据流,在这里我们只开启两路数据,一路RGB彩色数据,一路深度摄像头数据:

void rsdevice::enableStream(){
    streamEnable = true;
    dev->enable_stream(rs::stream::color, 640, 480, rs::format::rgb8, 60);
    dev->enable_stream(rs::stream::depth,640,480, rs::format::z16, 60);
    dev->start();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

获取到RGB彩色数据:

uchar * rsdevice::getFrameData(){
    dev->wait_for_frames();
    return (uchar *) dev->get_frame_data(rs::stream::color);
 .................
  • 1
  • 2
  • 3
  • 4

获取位置的深度距离数据,传入(x,y)点的坐标信息,获取到该点的距离。

float rsdevice::getDistance(int x, int y){
    uint16_t *depthImage = (uint16_t *) dev->get_frame_data(rs::stream::depth);
    float scale = dev->get_depth_scale();
    rs::intrinsics depthIntrin = dev->get_stream_intrinsics(rs::stream::depth);
    uint16_t depthValue = depthImage[y * depthIntrin.width + x];
    float depthInMeters = depthValue * scale;
    return depthInMeters;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OpenCV Mat与QImage 之间的转换

我们设想的是之后从librealsense中拿到的数据需要通过OpenCV处理一遍,而从上面可得知从摄像头里取得的是uchar* 类型的指针,我们需要先转换成Open CV 中使用的Mat, 而后在QT中显示,需要再转换成QImage。

uchar* —> Mat
      uchar* pRgb = dev->getFrameData();
      Mat rgb_show;
      Mat rgb(480, 640, CV_8UC3, pRgb);
  • 1
  • 2
  • 3
Mat —> QImage

由于Mat 默认是BGR,需要先转成RGB

 cvtColor(rgb, rgb_show, CV_BGR2RGB);
 QImage img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
                image.cols*image.channels(), QImage::Format_RGB888);
  • 1
  • 2
  • 3

每次QT绘制消息过来的时候,从realsense中取一帧,做相应的转换,转成QImage对象,再刷出去。

Realsense 深度数据的获取

从前面,我们已经拿到了RGB数据,并且显示出去了,现在我们需要去尝试拿到图像上的某一个点的深度信息。

转换坐标

QT中重写mousePressEvent函数,并且将坐标信息映射到图像当中:

void MainWindow::mousePressEvent(QMouseEvent *e){
    QPoint p = e->globalPos();
    p = picLabel->mapFromGlobal(p);
    int depth = dev->getDistance(p.x(),p.y());
    if(disInfoLabel != NULL){
        QString strLocation;
        strLocation.sprintf("The distance is %d",depth);
        disInfoLabel->setText(strLocation);
        disInfoLabel->move(e->x(),e->y());
        disInfoLabel->setFixedWidth(400);
        disInfoLabel->show();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

从realsense摄像头中计算出该像素点的距离信息:

float rsdevice::getDistance(int x, int y){
    uint16_t *depthImage = (uint16_t *) dev->get_frame_data(rs::stream::depth);
    float scale = dev->get_depth_scale();
    rs::intrinsics depthIntrin = dev->get_stream_intrinsics(rs::stream::depth);
    uint16_t depthValue = depthImage[y * depthIntrin.width + x];
    float depthInMeters = depthValue * scale;
    return depthInMeters;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Demo 跑起来效果如下,不过貌似R200的深度信息是以米为最小单位,这个精度上会有点问题啊,还需要再确认下。

DEMO

从RealSense中提取完整的深度和彩色图像,并存在opencv中的Mat里 这几天,简单的学习了如何调用别人函数,使用别人的代码,从开始的手足无措,到现在的胸有成竹(盲目的自信),想把这些总结起来,形成宝贵的经验教训,和大家分享。1.使用别人的代码,可是要珍惜那几行人类的注释啊! 2.看完注释,了解了大概情况,从重点地方下手,找到最核心的代码,概括的了解写代码各自的意义(不必急需了解每一行代码的意义,抓住重点,节约时间) 3.对于不懂的函数但意义重大的函数,F12查看定 阅读详情

相关推荐

intel realsense系列中 D435深度相机获取较为优质的场景数据,其中涉及内容:数据采集、图像对齐、post-processing、点云生成以及相机坐标系变换等问题的解决

接触D435深度相机将近两个月了,这里总结一下这段时间的使用过程中,碰到的问题以及相关的解决方法。 所使用的配置环境如下: win10+VS2017+PCL1.9.0+OpenCV4.1.0 在使用相机之前,首先要下载相机厂商提供的官方SDK文件,进行学习和使用以及查阅一些基本的环境配置问题。这里可以参考之前写过的文章。 链接如下: https://blog.youkuaiyun.com/weixin_42734533/article/details/107238151 里面有相关内容的介绍这里就不多赘述。 对于

weixin_42734533的博客 1万+

intel realsense 读取深度信息

该相机有集成的开发工具包,只需要安装即可使用。目前只安装了python工具包pyrealsense2。为了方便环境管理及不同运行环境之间的自由切换,本项目安装了Conda管理工具Miniconda[1](备注:Anaconda更加完善,但容量更大,两者皆可)。目前所用使用的代码均为python,代码编辑器使用Pycharm 社区版,操作系统为Ubuntu2204的Linux系统。Pycharm直接下载安装即可。安装好conda之后创建一个conda虚拟环境,例如python10_realsense2。

wcxw111的博客 921

Intel RealSense D435 深度相机详解

Intel RealSense D435 深度相机是 Intel 推出的一款基于深度感知技术的相机,广泛应用于机器人、无人机、增强现实(AR)、虚拟现实(VR)、3D扫描、智能监控等领域。D435 是 RealSense 系列中较为高端的深度相机之一,结合了深度传感和 RGB 摄像技术,为用户提供高精度的深度数据和高质量的图像捕捉能力。

crasher123的博客 2944

3步掌握!从深度图像到高质量点云的Intel RealSense实战指南

你是否曾经面对深度相机输出的原始深度图像,却不知如何将其转化为清晰的三维点云?是否在点云重建过程中遇到过噪声干扰、空洞缺失或性能瓶颈?本文将带你深入Intel RealSense SDK的核心,掌握从RAW深度图像到高质量点云的完整技术流程,解决实际开发中的常见痛点。 ## 一、问题剖析:为什么你的点云质量总是不理想? 深度相机输出的原始数据并非完美的三维信息,而是带有各种噪声和畸变的二维深度

gitblog_00565的博客 691

【Intel Realsense D435】实现视频显示、录制和保存(Python)

Intel Realsense D435相机的学习与使用,基于Python实现了视频录制功能,可同时录制RGB视频、灰度深度视频和伪彩色深度视频。

qq_41026536的博客 6305

图像深度信息提取与分析(Matlab实现)

在这里,我们假设标定参数为0.1,表示每个像素的视差对应于0.1米的深度。双目视觉利用两个相机从不同的角度同时拍摄同一个场景的图像,通过计算两个图像之间的视差信息来估计场景中物体的深度。通过双目图像的处理和视差计算,我们获得了场景中物体的深度信息,并通过深度图进行了可视化展示。在本文中,我们将使用Matlab实现图像深度信息的提取,并展示如何利用该信息进行简单的分析和可视化。在上述代码中,calibration_factor表示标定参数,depth_map表示深度图,其中每个像素的值表示该位置处的深度值。

ByteJolt的博客 641

遨博协作机器人ROS开发 - Intel RealSense深度相机ROS驱动

大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),在前面课程中我们讲解了MoveIt!机械臂编程相关知识,接下来我们来学习机器感知与机械臂控制相关课程。今天我们学习“Intel RealSense深度相机ROS驱动”。

aubo_academy的博客 4212

深度信息提取与图像处理

在图像处理领域,深度信息的提取一直都是一个热门话题。深度信息可以为图像的识别、分类、分割提供更多的信息,因此其在计算机视觉领域具有广泛的应用。接下来,我们可以使用深度学习网络进行深度信息的提取。以上是本文提供的关于深度信息提取与图像处理的一些实现方法,更多的灵活应用需要读者自己去探索。至此,我们已经成功地使用 MATLAB 提取了一张图像的深度信息,并进行了可视化展示。本文将介绍如何使用 MATLAB 进行深度信息的提取,并提供相应的源代码。首先,我们需要加载一张图像。深度信息提取与图像处理。

code_welike的博客 413

5分钟搞定Intel RealSense深度相机在MATLAB中的极速部署

还在为三维视觉项目开发而烦恼吗?想用MATLAB快速调用Intel RealSense深度相机,却苦于复杂的C++接口?今天就来教你如何在5分钟内完成RealSense SDK的MATLAB部署,让你的科研和工程项目瞬间起飞! ## 快速上手:两种安装方式任你选 无论你是MATLAB新手还是资深用户,总有一种方式适合你。下面两种安装方法都能让你快速开始RealSense深度相机的开发工作:

gitblog_00609的博客 622

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

深入解析iDP3的Learning模块:从数据集构建到3D动作预测的代码实现

本文深入解析iDP3框架的Learning模块,从数据集构建到3D动作预测的完整代码实现。通过扩散模型实现视觉输入到动作序列的端到端预测,详细介绍数据采集、增强策略、模型架构及训练技巧,帮助开发者掌握3D动作预测策略的核心技术。

k0l1m2n3o的博客 310

实战Intel RealSense SR300相机Python开发:从驱动到深度数据获取的完整指南

Intel RealSense SDK 2.0为开发者提供了强大的深度相机开发框架,支持包括SR300在内的多种RealSense设备。本文将详细介绍如何在Ubuntu系统上配置SR300相机的Python开发环境,并实现深度数据的高效采集与处理。我们将从实际开发痛点出发,提供完整的RealSense SR300 Python开发解决方案。 ## 深度视觉开发的三大痛点 在开始RealSens

gitblog_00870的博客 894

从零部署思澈科技SiFli-Solution:避坑指南与实战排错

本文详细介绍了从零部署思澈科技SiFli-Solution开发环境的完整流程与实战排错指南。重点解析了Keil uVision5版本选择、Butterfli工具路径配置等关键步骤,并针对Keil路径报错、函数冲突等高频问题提供了具体解决方案,帮助开发者高效避坑,快速搭建稳定的嵌入式开发环境。

devops8pract的博客 529

如何在macOS上快速搭建Intel RealSense深度相机开发环境:从零开始的完整指南

你是否想在macOS上探索3D视觉的奇妙世界?Intel RealSense深度相机为你打开了一扇通往深度感知技术的大门。无论是机器人导航、AR/VR应用还是智能监控,这款强大的硬件都能为你提供精准的3D数据。今天,我将带你一步步在macOS上搭建完整的RealSense开发环境,让你轻松开始深度感知的创作之旅! ## 📋 准备工作:检查你的macOS开发工具箱 在开始之前,让我们确保你的系

gitblog_00231的博客 1068

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 424

配置VScode编译、调试STM32(一)手动配置makefile和debug

做嵌入式的朋友们都应该有过想要有个功能强大的IDE或者编辑器,Keil MDK5、IAR EWARM是用的比较普遍的平台了,但是两者在编辑器方面都比较弱势,当然可以设置 或者使用外部编辑器,像Sourceinsight、notePad++这样,但毕竟需要切换回来进行Build、Debug,非常麻烦。 VScode从发布至今口碑一直很好,而且里面有非常多的插件,比如彩虹括号、Code Runner、...

hanhe0551的博客 4289

从深度到三维:用Intel RealSense SDK轻松实现点云重建

你是否曾想过,如何让计算机像人眼一样"看见"三维世界?当你面对一堆杂乱的点云数据时,是否感到无从下手?今天,我将带你探索Intel RealSense SDK如何将深度图像转化为生动的三维点云,让你轻松实现从二维到三维的视觉革命! Intel RealSense SDK是一个功能强大的开源工具包,专为深度感知和三维重建设计。无论你是机器人开发者、AR/VR爱好者,还是计算机视觉研究者,这个工具都

gitblog_00903的博客 414

MAC(m1)-VMWare Fusion安装CentOS7.9

MAC(m1)-VMWare Fusion安装CentOS7.9

兴趣是最好的老师 1767

如何快速掌握Intel RealSense深度相机标定:面向开发者的完整实战指南

Intel RealSense深度相机标定是计算机视觉和机器人技术中实现精确三维测量的关键技术。本指南将带您从零基础到专业级标定,涵盖D400系列相机的内参外参校准、多平台部署和实际应用场景,助您充分发挥RealSense设备的性能潜力。librealsense SDK提供了完整的标定工具链,让深度测量更加精准可靠。 ## 📊 深度相机标定的核心价值 ### 为什么需要专业标定? 深度相机通

gitblog_00461的博客 1170

SPMI协议学习总结

SPMI(System Power Management Interface)是由MIPI(Mobile Industry Processor Interface)联盟定义的一种硬件接口标准,它主要用于移动设备中,连接SoC(System on Chip)处理器系统的集成电源控制器与一个或多个电源管理IC(PMIC),以实现精确的电源管理

歌颂苦难的行为是无耻的; 1082

【华为OD技术面试手撕真题】134、爬楼梯 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)

【华为OD技术面试手撕真题】134、爬楼梯 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何

KJ.JK 2184

REA 接入 Ghidra 逆向引擎完整指南:JDK 21 环境配置、doctor 验证到首次分析

REA(Reverse Engineer Anything)把 Ghidra、Hopper 这类逆向引擎接到你的 AI Agent 后面,让你可以直接用自然语言驱动反编译、汇编与 xref 查询。本文只讲一件事:如何把 Ghidra 12.1.x 正确接进 REA——从划清安装边界、配置 JDK 21,到用 `rea doctor` 体检、注册客户端、跑通第一次二进制分析,最后覆盖超时与多引擎选择

gitblog_00174的博客 1111

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

三步搞定Intel RealSense深度相机开发环境配置

想在macOS系统上快速搭建Intel RealSense深度相机开发环境吗?Intel RealSense SDK为计算机视觉应用提供了强大的深度感知能力,让你轻松实现3D视觉、SLAM、机器人导航等前沿技术。本文将为你提供完整的macOS配置指南,从环境准备到功能验证,让你快速上手深度相机开发。 ## 🔍 深度相机开发痛点分析 在macOS上配置Intel RealSense开发环境时,

gitblog_00085的博客 735

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

一款高性能深度相机Intel RealSense D435

Intel RealSense D435 是 Intel 推出的一款高性能深度相机,属于 RealSense 系列产品的一部分,如果你需要自定义配置,可以修改文件中的参数。例如,你可以调整分辨率、帧率、启用或禁用特定的传感器等。

Made In SQL 5718

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机视觉——Intel RealSense D435的使用及python环境下的实现

​ 深度相机是一种能够捕捉场景中物体的深度信息(即物体与相机之间的距离)的设备。与传统的二维相机不同,深度相机除了拍摄图像的颜色和亮度外,还能生成一个关于场景中每个像素距离相机的深度数据,通常称为“深度图”。​是 Intel 推出的一款高性能深度相机,属于 RealSense 系列产品的一部分。它结合了深度传感技术和 RGB 图像捕捉功能,广泛应用于机器人、增强现实(AR)、虚拟现实(VR)、计算机视觉、三维扫描等多个领域。

weixin_46824709的博客 1万+
上一篇: 贝叶斯公式的直观理解(先验概率/后验概率)
下一篇: 常用机器学习与数据挖掘相关术语(该充充电了...)
HFKuAng
博客等级 码龄11年 70粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值