ubuntu 使用奥比中光播放点云

#引入python库numpy和open3d,可以通过pip install命令安装
import os
import numpy as np
import open3d as o3d
from openni import openni2
import cv2
#打开文件路径

openni2.initialize()

dev = openni2.Device.open_any()
print(dev.get_device_info())

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

cap = cv2.VideoCapture(2)
step = 0
innermtx = np.load(r"./mtx.npy")

vis = o3d.visualization.Visualizer()
#创建播放窗口
vis.create_window()
pointcloud = o3d.geometry.PointCloud()
to_reset = True
vis.add_geometry(pointcloud)

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
    dpt = dpt1 + dpt2
    print(np.max(dpt))
    dpt = cv2.flip(dpt, 2)
    ret,frame_img = cap.read()
    cv2.imshow("img", frame_img)
    cv2.waitKey(2)
    frame = o3d.geometry.Image(frame_img)

    dpt = o3d.geometry.Image(dpt)
    rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(frame, dpt)
    print(rgbd_image)
    maxtrix = o3d.camera.PinholeCameraIntrinsic(frame_img.shape[1], frame_img.shape[0], innermtx[0][0], innermtx[1][1], innermtx[0][2], innermtx[1][2])
    # maxtrix = o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)
    pcd = pointcloud.create_from_rgbd_image(rgbd_image, maxtrix)
    # Flip it, otherwise the pointcloud will be upside down
    pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
    pointcloud.points = o3d.utility.Vector3dVector(pcd. points)
    pointcloud.colors = o3d.utility.Vector3dVector(pcd. colors)

    vis.update_geometry(pointcloud)
    if to_reset:
        vis.reset_view_point(True)
        to_reset = False
    vis.poll_events()
    vis.update_renderer()

你可能感兴趣的:(SLAM,ubuntu,python,linux)