奥比中光Astra SDK相机SDK openni&&相机成像原理

这篇具有很好参考价值的文章主要介绍了奥比中光Astra SDK相机SDK openni&&相机成像原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.1 成像原理简介

1.1.1 结构光

1.1.2 双目视觉

1.1.3 光飞行时间TOF​

2.使用手册

参考网址

2.1 产品集成设计

2.2 SDK介绍与使用

2.3 常用API介绍

OPENNI API

2 OpenNI类(OpenNI.h)


1.1 成像原理简介

1.1.1 结构光

结构光,英文叫做 Structured light,通常采用特定波长的不可见的红外激光作为光源,它发射出来的光经过

一定的编码投影在物体上,通过一定算法来计算返回的编码图案的畸变来得到物体的位置和深度信息。根

据编码图案不同一般有条纹结构光---enshape ,编码结构光---Mantis Vision, Realsense(F200), 散斑结构光

---apple(primesense), 奥比中光。下图是一个典型的结构光相机的示意图:奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

结构光(散斑)的优点主要有:

1)方案成熟,相机基线可以做的比较小,方便小型化。

2)资源消耗较低,单帧 IR 图就可计算出深度图,功耗低。

3)主动光源,夜晚也可使用。

4)在一定范围内精度高,分辨率高,分辨率可达 1280x1024,帧率可达 60FPS。

散斑结构光的缺点与结构光类似:

1)容易受环境光干扰,室外体验差。

2)随检测距离增加,精度会变差。

1.1.2 双目视觉

奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

双目相机的主要优点有:

1)硬件要求低,成本也低。普通 CMOS 相机即可。

2)室内外都适用。只要光线合适,不要太昏暗。

但是双目的缺点也是非常明显:

1)对环境光照非常敏感。光线变化导致图像偏差大,进而会导致匹配失败或精度低

2)不适用单调缺乏纹理的场景。双目视觉根据视觉特征进行图像匹配,没有特征会导致匹配失败。

3)计算复杂度高。该方法是纯视觉的方法,对算法要求高,计算量较大。

4)基线限制了测量范围。测量范围和基线(两个摄像头间距)成正比,导致无法小型化。

1.1.3 光飞行时间TOF奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

TOF 的优点主要有:

1)检测距离远。在激光能量够的情况下可达几十米。

2)受环境光干扰比较小。

但是 TOF 也有一些显而易见的问题:

1)对设备要求高,特别是时间测量模块。

2)资源消耗大。 该方案在检测相位偏移时需要多次采样积分,运算量大。

3)边缘精度低。

4)限于资源消耗和滤波,帧率和分辨率都没办法做到较高。目前消费类最大也就 VGA。奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

双目具有良好的户外表现,但不适用纹理变化不明显的场合,如白墙;

TOF在远距离的精度更佳,但目前受限于图像分辨率低、功耗大;

结构光综合表现目前来看,在三种3D传感技术中最优,但是户外强光干扰明显和远距离处精度差

奥比中光推出了940nm波段的二代产品P1、Deeyea和双目结构光结合的产品苍龙一 号,尽可能改善结构光的固有缺陷。

2.使用手册

参考网址

https://developer.orbbec.com.cn/develop_details.html?id=1 很全

https://developer.orbbec.com.cn/technical_library.html?id=68 代码实例

https://developer.orbbec.com.cn/technical_library.html?id=70 API

SDK支持

https://developer.orbbec.com.cn/download.html?id=75&menushow=1

官网教程

https://developer.orbbec.com.cn/technical_library.html?id=22

应用例程

https://developer.orbbec.com.cn/develop_details.html?id=3

2.1 产品集成设计

深度图

不同于RGB图像,深度图中每个像素点保存的是视场范围内物体距离相机平面的深度值数据。深

度原始数据通常为16-bit unsigned int类型,单位可通过SDK指定,通常为1mm,即深度图中每个

像素点保存着16-bit无符号整型数据,单位为1mm。

为了将深度数据可视化的显示出来,通常将其转换为灰度图显示,如下图所示,不同灰度级表示

不同的深度值大小。奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

2.2 SDK介绍与使用

奥比中光提供的OpenNI2.3系列SDK基于OpenNI2开发,OpenNI2(开放自然交互)是一个多

语言、跨平台的框架,它定义了应用程序、中间件和3D传感设备之间的接口。

windows上位机使用前需先安装对应的驱动,具体步骤为:

1.双击【SensorDriver_V4.3.0.17.exe】进行驱动安装

2.解压OrbbecViewer上位机安装包

3.进入解压后文件夹,双击【OrbbecViewer.exe】运行上位机

Windows工程环境配置

1)适用范围

本公司SDK适用X86/X64 Windows7及以上平台

2)开发平台搭建

推荐的Windows开发平台为Visual Studio 2013或以上版本。对于Visual Studio平台,可通过以

下步骤搭建开发环境:

 新建或打开C++工程

 选择“项目——属性”,将\SDK\windows\Include目录添加到头文件依赖路径下,注意属性

配置(x86/x64)与运行时一致奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

奥比中光 大白相机 sdk,数码相机,深度学习,python,人工智能,计算机视觉

在“链接器——输入”目录下新增OpenNI.lib项,完成环境配置,可以开始编辑自己的代码

了。

 注意编译运行工程时,把x64-release或者x86-release文件夹里面OpenNI文件夹以及ini和dll

文件拷贝到exe文件所在目录下,否则会闪退或报错。

2.3 常用API介绍

https://zhuanlan.zhihu.com/p/608879068

  1. OPENNI API

主要包含4个大类:

(1)openni::OpenNI

提供了一个静态的API进入点。提供访问设备,设备相关事件,版本和错误信息。首先确保连接了设备。

(2)openni::Device

提供与连接到系统的单个传感器设备的接口。需要在创建OpenNI之前先初始化它。提供了对流的访问权限。

(3)openni::VideoStream

从一个设备(Device)里提取一个视频流,需要获取视频帧引用(VideoFrameRefs)。

(4)openni::VideoFrameRef

从相关元数据中提取单个视频。从特定流获取。

除了这些主要类之外,还提供了各种支持类和结构来保存特定类型的数据。提供了一个用于将OpenNI视频流存储到文件中的记录器类。还有一些为OpenNI和Stream类可以生成的事件提供的监听器类。视频流可以使用两种基本方法之一来读取:基于循环的和基于事件的。这两种方法将在本指南的后面详细介绍

(5) PlaybackControl 类

有些操作只有在处理已记录的文件时才可能执行。这些操作包括在流中查找、确定录音的长度、循环录音以及改变播放速度。这个功能已经被播放控制类封装了。

2 OpenNI类(OpenNI.h)

  • 2.1 对设备的基本访问

(1)OpenNI::initialize() 初始化所有可用的传感器驱动程序,并扫描系统中可用的设备

(2)OpenNI::enumerateDevices() 返回已连接到系统的所有可用设备的列表

(3) OpenNI::shutdown() 关闭所有驱动程序并正确地清理文章来源地址https://www.toymoban.com/news/detail-850928.html

 //1.初始化
    Status rc = OpenNI::initialize();
    if (rc != STATUS_OK)
    {
        printf("Initialize failed\n%s\n", OpenNI::getExtendedError());
        return 1;
    }
    // 2.设备对象
    Device device;
    rc = device.open(ANY_DEVICE);
    if (rc != STATUS_OK)
    {
        printf("Couldn't open device\n%s\n", OpenNI::getExtendedError());
        return 2;
    }
    // 3.视频流对象
    VideoStream depth;

    if (device.getSensorInfo(SENSOR_DEPTH) != NULL)
    {
        rc = depth.create(device, SENSOR_DEPTH);
        if (rc != STATUS_OK)
        {
            printf("Couldn't create depth stream\n%s\n", OpenNI::getExtendedError());
            return 3;
        }
    }

    rc = depth.start();
    if (rc != STATUS_OK)
    {
        printf("Couldn't start the depth stream\n%s\n", OpenNI::getExtendedError());
        return 4;
    }
    // 4.循环读取一帧,getData
    int changedStreamDummy;
    VideoStream* pStream = &depth;
    VideoFrameRef frame;                  // 先定义再声明,最后使用
    const int maxFramesToProcess = 100;
    //Sentinel to count the number of frames that we've processed
    int count = 0;

    //The frame processing loop
    do {
        rc = OpenNI::waitForAnyStream(&pStream, 1, &changedStreamDummy, TIMEOUT_FOREVER);
        if (rc != STATUS_OK)
        {
            printf("Wait failed! (timeout is %d ms)\n%s\n", TIMEOUT_FOREVER, OpenNI::getExtendedError());
            continue;
        }

        rc = depth.readFrame(&frame);
        if (rc != STATUS_OK)
        {
            printf("Read failed!\n%s\n", OpenNI::getExtendedError());
            continue;
        }

        if (frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_1_MM && frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_100_UM)
        {
            printf("Unexpected frame format\n");
            continue;
        }

        DepthPixel* pDepth = (DepthPixel*)frame.getData();   //转换帧数据为DepthPixel类型的指针

        printf("[%08llu] %8d\n ", (long long)frame.getTimestamp(), pDepth[0]);

        int middleIndex = (frame.getHeight() + 1) * frame.getWidth() / 2;
        printf("[%08llu] %8d\n %8d\n %8d\n", (long long)frame.getTimestamp(), pDepth[middleIndex], frame.getHeight(), frame.getWidth());

        count++;
    } while (count < maxFramesToProcess);

    // 释放资源
    depth.stop();
    depth.destroy();
    device.close();
    OpenNI::shutdown();

    std::cout << "hit enter to exit program" << std::endl;
    system("pause");

到了这里,关于奥比中光Astra SDK相机SDK openni&&相机成像原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度相机、实验箱、扫描仪、机器狗…… 奥比中光超强性能3D视觉应用亮相VALSE 2023

    6月10日-12日,VALSE 2023视觉与学习青年学者研讨会在江苏无锡举办,奥比中光作为金牌赞助商,携Femto Mega与Gemini 2系列3D相机以及3D视觉实验箱开发套件、手持3D扫描仪、四足机器狗等创新解决方案参展,为3D视觉开发者提供多样化的开发选择。 VALSE是计算机视觉、图像处理、模

    2024年02月09日
    浏览(72)
  • [ROS2系列] ORBBEC(奥比中光)AstraPro相机在ROS2进行rtabmap 3D建图

    目录 背景: 一、驱动AstraPro摄像头 二、安装rtabmap error1:缺包 三、尝试 四、参数讲解 五、运行 error2: Did not receive data since 5 seconds! 六、效果​编辑 error4: 背景: 1、设备:pc;jeston agx orin 2、环境:Ubuntu20.04;ROS2(Foxy) 3、主从机配置,jeston agx orin为主机 4、 jeston agx orin含有

    2024年02月07日
    浏览(41)
  • ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(标定与配准)

    相机自带的D2C效果不好,颜色和点云没有很好地匹配上,自己按照下面的介绍手动匹配一下。 在下载来的sdk,里面没有标定的文件:ost.yaml. 需要自己进行标定、生成。 我所使用的相机型号是Astra_pro,它是一个单目结构光相机,有一个RGB摄像头+一个IR摄像头。从数量上算是一个

    2024年02月06日
    浏览(44)
  • 实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

    接着上篇,开始orb-slam2稠密回环建图 先上效果图  这里感谢大神提供一个可回环的稠密地图版本: https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP.git 2.1 安装依赖(和orb-slam2环境配置一样,如果已经配置过,可以跳到pcl安装) (1)Pangolin(推荐0.5版本) (2)opencv3.2.0(巨坑!!

    2024年02月08日
    浏览(42)
  • 实测 (四)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

    首先小白老师分享的ORB-SLAM3的可回环的稠密地图版本,具体在这篇博客,下载但是却没有相关的具体实现教程,这里我们先使用 奥比中光Astrapro 两款相机进行配置实现 其实与orb-slam2的环境配置一样,使用的仍然是pagolin0.5,和opencv3.2.0版本(3.4.x也可以),pcl1.8.1+vtk7.1.1 这里

    2024年02月16日
    浏览(42)
  • 奥比中光:进击具身智能,打造机器人之眼

    大数据产业创新服务媒体 ——聚焦数据 · 改变商业 跨过奇点的生成式人工智能是一个缸中大脑,只有赋予形体,才能与物理世界产生互动。 在5月的ITF世界半导体大会上,英伟达创世人兼CEO黄仁勋说,人工智能的下一波浪潮将是具身智能。 8月中旬,世界机器人大会在北京

    2024年02月11日
    浏览(42)
  • 相机成像原理

    目录 1、相机成像原理说明 2、相机成像过程 2.1、世界坐标系-相机坐标系 2.2、相机坐标系–图像坐标系 2.3、图像坐标系–像素平面坐标系 3、单点无畸变的相机成像模型         近期项目需进行单目测距、及像素坐标与实际物理距离估算,对相机成像相关知识点进行整理

    2024年02月05日
    浏览(42)
  • 『红外相机』成像原理

    红外相机成像原理是利用物体辐射的红外能量来获取图像。红外能量是一种不可见的电磁辐射,波长范围通常从0.8微米到1000微米。 探测红外辐射:红外相机使用红外传感器(如红外焦平面阵列)来 探测目标物体发射的或反射的红外辐射 。红外辐射可以是物体自身的热辐射(

    2024年02月16日
    浏览(37)
  • 相机成像原理【第一节】

    1、胶片摄影与数码摄影 胶片摄影是把光学镜头的光信号投射到胶片上, 数码摄影是把光学镜头的光信号投射到传感器上,传感器把光信号依次处理为电信号和数字信号,片上计算机再把数字信号进行处理 2、相机的组成 2.1 只有传感器相机的成像 一棵树所有的点发出的光照

    2024年02月12日
    浏览(41)
  • 3D线扫相机-沙姆成像原理

    3D线扫相机,又名激光轮廓仪,3D线激光测量仪,基本原理:通过向物体表面投射线激光平面,从而获取该平面与待测物体表面交线处三维点坐标,解算物体深度信息。主要器件:线激光器、镜头、芯片、处理板、接口板。 主要原理:三角测量 其中光学成像原理:沙姆成像 沙

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包