关于orbbec gemini rgb-d相机在windows系统中使用Python库Openni调用深度流与RGB图的结合并进行结构光测距

本文介绍了如何在Windows系统中安装奥比中光相机的驱动和SDK,包括OpenNI2SDK和OrbbecSDK的区别。然后详细阐述了如何使用Python通过OpenNI库获取和显示深度流,并展示了代码示例。此外,文章还提及了相机参数导出、社区支持以及相机的深度和彩色视频流功能。
摘要由CSDN通过智能技术生成

1.所有的奥比中光相机在windows系统中需要先在官网下载驱动,驱动地址在这里https://developer.orbbec.com.cn/download.html?id=32

简要介绍一下SDK中openni2sdk和orbbec sdk的区别

OpenNI 2 SDK和Orbbec SDK都是与深度摄像头和3D感知设备相关的软件开发工具包(SDK)。这两个SDK之间存在一些区别,它们的主要区别在于。

(1). 所属公司:OpenNI 2 SDK是由PrimeSense(苹果收购)开发的,而Orbbec SDK是由Orbbec公司开发的。这意味着OpenNI 2 SDK更加广泛地用于支持不同品牌和型号的深度摄像头设备,而Orbbec SDK更加专注于Orbbec公司自家的设备。

(2). 跨平台支持:OpenNI 2 SDK是一个跨平台的SDK,可以在Windows、Linux和Mac OS等操作系统上运行。而Orbbec SDK主要针对Windows操作系统,但也提供了一些有限的支持Linux和Android平台。

(3). 功能和接口:OpenNI 2 SDK提供了丰富的功能和API,可以进行深度图像采集、骨骼跟踪、手势识别等。它还支持多个摄像头的同步,以及与其他传感器(如RGB相机)的数据融合。Orbbec SDK也提供了类似的功能,但其功能集可能会更加专注于Orbbec设备的特定功能和性能优化。

(4). 社区支持和生态系统:OpenNI 2 SDK有一个庞大的社区支持,有大量的用户和开发者共同维护和扩展。这使得可以在社区中找到更多的资源、文档和示例代码。Orbbec SDK的社区支持相对较小,但仍有一些开发者在其支持下进行开发。

下载解压后

双击运行即可成功安装driver。

运行成功后可以右键点击我的电脑-管理-设备管理器查看

2.获取官方SDK

https://developer.orbbec.com.cn/download.html?id=77

 3.下载后的文件直接解压获得当前文件

 4.双击这个orbbecViewer进入SDK界面。

有四种模式,深度,彩色,红外,点云,因为我目前只需要深度和彩色的视频流,因此红外和点云没有做过多的探究。可以看到把鼠标放置在深度图中可以显示像素坐标【163,153】,625是深度,单位mm,可以在左边深度选项中调整单位。

 四种模式全部展开的效果图

 在这里可以导出相机的参数,这个在后面会用到,导出后会在后面第五步的代码中的函数def depth2xyz中用到,导出的位置就再你刚刚下载SDK的位置。

不得不说,orbbec的gemini相机真的很棒!

分隔符######################################################################

以上就是怎么下载sensor和sdk的教程

5.接下来就是如何使用python来调用深度流了。

Orbbec官方SDK文档中,有C&C++和python等各种SDK

 

由于本人使用Python进行的深度学习检测,所以想选用Python对视频帧的深度流进行获取,因此参考了别人对深度流的调用,参考文章

在Ubuntu中获取奥比中光的深度值 Python代码_奥比中光深度相机 python读取深度_咕噜咕噜噜噜的博客-CSDN博客

Orbbec-Astra相机windows系统下Python配置使用_奥比中光3D视觉开发者社区的博客-CSDN博客

这两篇文章给出了如何通过使用python的Openni库进行深度流的获取。

我在两位大佬的基础上做出了改进,使用openni对彩色图进行深度获取。

查找资料后了解了一下openni库的作用,不感兴趣的同学可以跳过

Python的OpenNI库是一个用于与深度摄像头设备进行交互和处理的Python绑定库。它基于OpenNI(Open Natural Interaction)开源框架,提供了一组API和工具,用于获取和处理深度图像、骨骼跟踪、手势识别等相关功能。

使用Python的OpenNI库,您可以实现以下功能:

(1). 深度图像获取:通过与深度摄像头设备进行通信,可以获取实时的深度图像数据。这些深度图像可以用于不同的应用领域,如计算机视觉、机器人、虚拟现实等。

(2). 骨骼跟踪:OpenNI库还提供了对人体骨骼的跟踪和姿势识别功能。它可以通过分析深度图像,识别出人体的关键骨骼点,如头部、手臂、腿部等,从而实现对人体动作的跟踪和分析。

(3). 手势识别:通过OpenNI库,您可以实现对手势的实时识别。这对于交互式应用程序非常有用,如基于手势的控制、虚拟现实交互等。

(4). 数据处理和分析:OpenNI库提供了各种工具和函数,用于对深度图像和骨骼数据进行处理和分析。您可以进行图像滤波、对象检测、姿势识别算法的开发等。

(5). 设备控制:通过OpenNI库,您可以对深度摄像头设备进行控制和配置。您可以调整采集参数、设置触发模式、配置设备的分辨率和帧率等。

Python的OpenNI库提供了一个方便的接口,用于与深度摄像头设备进行交互,并实现深度图像获取、骨骼跟踪、手势识别等功能。这对于开发各种基于深度感知的应用程序非常有用。

重点来了!!!!!!

这是如何获取深度流并将在RGB图上显示深度

import cv2
import numpy as np
from openni import openni2


def depth2xyz(u, v, depthValue):
    fx = 475.977    #先前获得的IR_FX
    fy = 475.977    #先前获得的IR_FY  
    cx = 319.206    #先前获得的IR_cx
    cy = 195.92     #先前获得的IR_cy

    depth = depthValue * 0.001 #深度值是单位mm,这里转换成m。

    z = float(depth)
    x = float((u - cx) * z) / fx
    y = float((v - cy) * z) / fy
    #u 是像素点的水平坐标,cx 是结构光相机的光学中心在水平方向上的坐标,z 是深度值(m)
    #fx 是结构光相机的水平焦距,v 是像素点的垂直坐标,cy 是结构光相机的光学中心在垂直方向上的        
    #坐标,fy 是结构光相机的垂直焦距
    

    result = [x, y, z]
    return result
    


def mousecallback(event, x, y, flags, param): #定义双击鼠标响应事件
    if event == cv2.EVENT_LBUTTONDBLCLK:
        print("Clicked on color image:", x, y)

        # Get depth value at the clicked position
        depth_frame = depth_stream.read_frame()
        depth_data = np.array(depth_frame.get_buffer_as_uint16()).reshape([480, 640])
        depth_value = depth_data[y, x]

        # Convert depth value to coordinates
        coordinate = depth2xyz(x, y, depth_value)
        if coordinate[0] == 0:
            print("Unable to measure at this point.")
        else:
            print("Depth coordinate:", coordinate)


if __name__ == "__main__":
    openni2.initialize()#初始化openni库

    dev = openni2.Device.open_any()  #获取设备的参数,例如型号
    print(dev.get_device_info())

    depth_stream = dev.create_depth_stream() #创建深度流
    depth_stream.start() #启动深度流

    cap = cv2.VideoCapture(0) #捕捉彩色图像
    cv2.namedWindow('color')  #命名彩色图像窗口
    cv2.setMouseCallback('color', mousecallback)  #将双击鼠标响应事件绑定彩色图像窗口

    while True:
        ret, frame = cap.read()
        cv2.imshow('color', frame)

        key = cv2.waitKey(1)
        if int(key) == ord('q'):
            break

    depth_stream.stop()
    dev.close()
    cv2.destroyAllWindows()

注意!!!

这里需要将之前第三步下载的文件中几个openni2的文件复制到你当前运行代码的文件夹下

 OpenNI2.dll是OpenNI 2框架的一个动态链接库文件。它是OpenNI(Open Natural Interaction)开源框架的一部分,用于提供对深度摄像头设备的驱动程序和功能支持。包含了与深度摄像头设备通信和控制所需的驱动程序。它通过与摄像头设备建立连接,获取深度图像、彩色图像和其他传感器数据。

效果图:

蓝色框中显示当前点在inf位置,红色框中表示正常点,紫色框中表示正常的深度距离,单位是m。

PS:非常感谢女朋友晞晞的出镜!!!

第一次在CSDN写博客,有很多不足之处还望各位提出。后续如果有更多的改进我也会及时分享!

  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值