(17)深度点云学习--python安装openni打开奥比中光RGBD

1、主要参考

(1)安装

点云数据处理之安装python-openni_mengjiexu_cn的博客-CSDN博客_openni python

(2)打开摄像头

 2、安装openni和测试摄像头

2.1 下载安装摄像头驱动

(1)去以下地址下载驱动

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

 (17)深度点云学习--python安装openni打开奥比中光RGBD_第1张图片

(2)安装后可以在硬件管理中看到设备

 (17)深度点云学习--python安装openni打开奥比中光RGBD_第2张图片

 

2.2 下载openni(需要用到OpenNI2.dll文件)

(1)在奥比下面的地址下载

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

(17)深度点云学习--python安装openni打开奥比中光RGBD_第3张图片 

 (2)解压后,将以下1个文件夹、3个文件复制到我们需要的python目录下

OpenNI2文件夹、OpenNI.ini、OpenNI2.dll、OpenNI2.lib

1)来源 

(17)深度点云学习--python安装openni打开奥比中光RGBD_第4张图片

 

2)复制到 

(17)深度点云学习--python安装openni打开奥比中光RGBD_第5张图片 

2.3使用清华源安装openni

pip install openni -ihttps://pypi.tuna.tsinghua.edu.cn/simple

2.4 测试摄像头

(1)测试代码

from openni import openni2
import numpy as np
import cv2
 

if __name__ == "__main__":
    openni2.initialize()
    dev = openni2.Device.open_any()
    print(dev.get_device_info())

(2)测试结果

3、捕获和显示深度图

(1)测试代码

from openni import openni2
import numpy as np
import cv2
 
 
def mousecallback(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        print(y, x, dpt[y, x])
 
 
if __name__ == "__main__":
    openni2.initialize()
    dev = openni2.Device.open_any()
    print(dev.get_device_info())
    depth_stream = dev.create_depth_stream()
    dev.set_image_registration_mode(True)
    depth_stream.start()
    cap = cv2.VideoCapture(1)
    cv2.namedWindow('depth')
    cv2.setMouseCallback('depth', mousecallback)
    while True:
 
        frame = depth_stream.read_frame()
        #转换数据格式
        dframe_data = np.array(frame.get_buffer_as_triplet()).reshape([480, 640, 2])
        dpt1 = np.asarray(dframe_data[:, :, 0], dtype='float32')
        dpt2 = np.asarray(dframe_data[:, :, 1], dtype='float32')
 
        dpt2 *= 255
        #对于为什么要乘于255的解答
        #深度图像的深度值 是按照16位长度(两字节)的数据格式存储的,也可以认为前八位是高字节,后八位是低字节。
        #因此一张深度图像如果是 640480分辨率的话,那么图像字节大小 就是 640480*2,其中一个字节是8位(255)
        dpt = dpt1 + dpt2
        #cv2里面的函数,就是类似于一种筛选
        '假设我们需要让我们的深度摄像头感兴趣的距离范围有差别地显示,那么我们就需要确定一个合适的alpha值,公式为:有效距离*alpha=255,' \
        '假设我们想让深度摄像头8m距离内的深度被显示,>8m的与8m的颜色显示相同,那么alpha=255/(8*10^3)≈0.03,' \
        '假设我们想让深度摄像头6m距离内的深度被显示,>6m的与6m的颜色显示相同,那么alpha=255/(6*10^3)≈0.0425'
        dim_gray = cv2.convertScaleAbs(dpt, alpha=0.17)
        #对深度图像进行一种图像的渲染,目前有11种渲染方式,大家可以逐一去试下
        depth_colormap = cv2.applyColorMap(dim_gray, 2)  # 有0~11种渲染的模式
 
        cv2.imshow('depth', depth_colormap)
 
        ret, frame = cap.read()
        cv2.imshow('color', frame)
 
        key = cv2.waitKey(1)
        if int(key) == ord('q'):
            break
 
    depth_stream.stop()
    dev.close()

(2)测试结果

 

你可能感兴趣的:(深度学习,学习)