如何利用openni同时读取两个摄像头的深度数据

要同时读取两个摄像头的深度数据需要在openni2库中创建一个新的函数

    @classmethod
    def open_any_available(cls, id):
        z= 0
        for cam in cls.enumerate_uris():
            if z== id:
                try:
                    return cls(cam)
                except OpenNIError:
                    pass
            z+=1
        raise Exception("no available cams")

下面是一个简单示例代码

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_available(0)
    print(dev.get_device_info())
    dev1=openni2.Device.open_any_available(1)


    depth_stream = dev.create_depth_stream()
    depth_stream.start()
    
    depth_stream1 = dev1.create_depth_stream()
    depth_stream1.start()


    cap = cv2.VideoCapture(0)
    cap1 = cv2.VideoCapture(2)
    cv2.namedWindow('depth')
    cv2.setMouseCallback('depth',mousecallback)

    while True:

        frame = depth_stream.read_frame()
        frame1 =depth_stream1.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
        dpt = dpt1 + dpt2
        
        dframe_data1 = np.array(frame1.get_buffer_as_triplet()).reshape([480, 640, 2])
        dpt11 = np.asarray(dframe_data1[:, :, 0], dtype='float32')
        dpt21 = np.asarray(dframe_data1[:, :, 1], dtype='float32')
        
        dpt21 *= 255
        dpt31 = dpt11 + dpt21


        cv2.imshow('depth', dpt)
        cv2.imshow('depth1', dpt31)


        ret,frame = cap.read()
        #ret1,frame1 = cap1.read()
        cv2.imshow('color', frame)
        #cv2.imshow('color1', frame1)
        key = cv2.waitKey(1)
        if int(key) == ord('q'):
            break

    depth_stream.stop()
    dev.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值