【Intel Realsense D435】实现视频显示、录制和保存(Python)

这篇具有很好参考价值的文章主要介绍了【Intel Realsense D435】实现视频显示、录制和保存(Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章可以转载,但是必须表明出处!

最近在学习如何使用Intel Realsense D435深度相机,由此记录一下程序的开发过程。

以下为总体程序:

'''
使用realsense相机录制视频
'''

#!/usr/bin/env python
# coding=utf-8
import time
import pyrealsense2 as rs
import numpy as np
import cv2

class Camera(object):
    '''
    realsense相机处理类
    '''
    def __init__(self, width=1280, height=720, fps=30):
        self.width = width
        self.height = height
        self.pipeline = rs.pipeline()
        self.config = rs.config()
        self.config.enable_stream(rs.stream.color, self.width, self.height, rs.format.bgr8, fps)
        self.config.enable_stream(rs.stream.depth, self.width, self.height, rs.format.z16,  fps)
        # self.align = rs.align(rs.stream.color) # depth2rgb
        self.pipeline.start(self.config)  # 开始连接相机


    def get_frame(self):
        frames = self.pipeline.wait_for_frames() # 获得frame (包括彩色,深度图)
        # 创建对齐对象
        align_to = rs.stream.color            # rs.align允许我们执行深度帧与其他帧的对齐
        align = rs.align(align_to)            # “align_to”是我们计划对齐深度帧的流类型。
        aligned_frames = align.process(frames)
        # 获取对齐的帧
        aligned_depth_frame = aligned_frames.get_depth_frame()  # aligned_depth_frame是对齐的深度图
        color_frame = aligned_frames.get_color_frame()
        colorizer = rs.colorizer()
        depthx_image = np.asanyarray(aligned_depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())
        colorizer_depth = np.asanyarray(colorizer.colorize(aligned_depth_frame).get_data())
        return color_image, depthx_image,colorizer_depth

    def release(self):
        self.pipeline.stop()
if __name__=='__main__':

    # 视频保存路径
    video_path = f'D://Realsense//rgb_data//{int(time.time())}.mp4'
    video_depth_path = f'D://Realsense//depth_data//{int(time.time())}_depth.mp4'
    video_depthcolor_path = f'D://Realsense//depthcolor_data//{int(time.time())}_depthcolor.mp4'
    video_depthcolor_camera_path = f'D://Realsense//camera_colordepth//{int(time.time())}_depthcolor.mp4'
    # 初始化参数
    fps, w, h = 30, 1280, 720
    mp4 = cv2.VideoWriter_fourcc(*'mp4v') # 视频格式
    wr  = cv2.VideoWriter(video_path, mp4, fps, (w, h), isColor=True) # 视频保存而建立对象
    wr_depth = cv2.VideoWriter(video_depth_path, mp4, fps, (w, h), isColor=False)
    wr_depthcolor = cv2.VideoWriter(video_depthcolor_path, mp4, fps, (w, h), isColor=True)
    wr_camera_colordepth = cv2.VideoWriter(video_depthcolor_camera_path, mp4, fps, (w, h), isColor=True)

    cam = Camera(w, h, fps)
    print('录制视频请按: s, 保存视频或退出请按:q')
    flag_V = 0
    while True:
            color_image, depth_image, colorizer_depth = cam.get_frame() # 读取图像帧,包括RGB图和深度图
		 #深度图数据格式转换,uint16→uint8
            depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
            images = np.hstack((color_image, depth_colormap))   
            cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
            cv2.imshow('RealSense', colorizer_depth)

            # print('ll')
            key = cv2.waitKey(1)
            if key & 0xFF == ord('s') :
                flag_V = 1
            if flag_V == 1:
                wr.write(color_image)                # 保存RGB图像帧
                wr_depth.write(depth_image)          # 保存基于灰度深度图
                wr_depthcolor.write(depth_colormap)  # 保存计算所得着色深度图
                wr_camera_colordepth.write(colorizer_depth)  # 保存相机自行计算的着色深度图
                print('...录制视频中...')
            if key & 0xFF == ord('q') or key == 27:
                cv2.destroyAllWindows()
                print('...录制结束/直接退出...')
                break
    wr_depthcolor.release()
    wr_depth.release()
    wr.release()
    wr_camera_colordepth.release()
    cam.release()
    print(f',若保存视频,则视频保存在:{video_path}')


步骤分解如下:

①库引用

'''
使用realsense相机录制视频
'''

#!/usr/bin/env python
# coding=utf-8
import time
import pyrealsense2 as rs
import numpy as np
import cv2

②相机初始化、图像流数据获取与截止:由类实现。

class Camera(object):
    '''
    realsense相机处理类
    '''
    def __init__(self, width=1280, height=720, fps=30):
        self.width = width
        self.height = height
        self.pipeline = rs.pipeline()
        self.config = rs.config()
        self.config.enable_stream(rs.stream.color, self.width, self.height, rs.format.bgr8, fps)
        self.config.enable_stream(rs.stream.depth, self.width, self.height, rs.format.z16,  fps)
        self.pipeline.start(self.config)  # 开始连接相机


    def get_frame(self):
        frames = self.pipeline.wait_for_frames() # 获得frame (包括彩色,深度图)
        # 创建对齐对象
        align_to = rs.stream.color            # rs.align允许我们执行深度帧与其他帧的对齐
        align = rs.align(align_to)            # “align_to”是我们计划对齐深度帧的流类型。
        aligned_frames = align.process(frames)
        # 获取对齐的帧
        aligned_depth_frame = aligned_frames.get_depth_frame()  # aligned_depth_frame是对齐的深度图
        color_frame = aligned_frames.get_color_frame()
        colorizer = rs.colorizer()
        depthx_image = np.asanyarray(aligned_depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())
        colorizer_depth = np.asanyarray(colorizer.colorize(aligned_depth_frame).get_data())
        return color_image, depthx_image,colorizer_depth

    def release(self):
        self.pipeline.stop()

③主程序保存视频:根据键盘命令进行拍摄,保存路径需要根据本地情况进行修改。

if __name__=='__main__':

    # 视频保存路径
    video_path = f'D://Realsense//rgb_data//{int(time.time())}.mp4'
    video_depth_path = f'D://Realsense//depth_data//{int(time.time())}_depth.mp4'
    video_depthcolor_path = f'D://Realsense//depthcolor_data//{int(time.time())}_depthcolor.mp4'
    video_depthcolor_camera_path = f'D://Realsense//camera_colordepth//{int(time.time())}_depthcolor.mp4'
    # 初始化参数
    fps, w, h = 30, 1280, 720
    mp4 = cv2.VideoWriter_fourcc(*'mp4v') # 视频格式
    wr  = cv2.VideoWriter(video_path, mp4, fps, (w, h), isColor=True) # 视频保存而建立对象
    wr_depth = cv2.VideoWriter(video_depth_path, mp4, fps, (w, h), isColor=False)
    wr_depthcolor = cv2.VideoWriter(video_depthcolor_path, mp4, fps, (w, h), isColor=True)
    wr_camera_colordepth = cv2.VideoWriter(video_depthcolor_camera_path, mp4, fps, (w, h), isColor=True)

    cam = Camera(w, h, fps)
    print('录制视频请按: s, 保存视频或退出请按:q')
    flag_V = 0
    while True:
            color_image, depth_image, colorizer_depth = cam.get_frame() # 读取图像帧,包括RGB图和深度图
		 #深度图数据格式转换,uint16→uint8
            depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
            images = np.hstack((color_image, depth_colormap))   
            cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
            cv2.imshow('RealSense', images)

            # print('ll')
            key = cv2.waitKey(1)
            if key & 0xFF == ord('s') :
                flag_V = 1
            if flag_V == 1:
                wr.write(color_image)                # 保存RGB图像帧
                wr_depth.write(depth_image)          # 保存基于灰度深度图
                wr_depthcolor.write(depth_colormap)  # 保存计算所得着色深度图
                wr_camera_colordepth.write(colorizer_depth)  # 保存相机自行计算的着色深度图
                print('...录制视频中...')
            if key & 0xFF == ord('q') or key == 27:
                cv2.destroyAllWindows()
                print('...录制结束/直接退出...')
                break
    wr_depthcolor.release()
    wr_depth.release()
    wr.release()
    wr_camera_colordepth.release()
    cam.release()
    print(f',若保存视频,则视频保存在:{video_path}')

视频录制截图:

RGB图像

【Intel Realsense D435】实现视频显示、录制和保存(Python),python,开发语言,视频

深度图极其伪彩色图

【Intel Realsense D435】实现视频显示、录制和保存(Python),python,开发语言,视频

【Intel Realsense D435】实现视频显示、录制和保存(Python),python,开发语言,视频文章来源地址https://www.toymoban.com/news/detail-525348.html

到了这里,关于【Intel Realsense D435】实现视频显示、录制和保存(Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Ubuntu18.04安装配置使用Intel RealSense D435i深度相机以及在ROS环境下配置

    最近因为学习开发需要,要开始接触一些视觉相关的内容,拿到了一个Inter 的D435i深度相机,记录一下在Ubuntu18环境下配置SDK 包的历程 注意 : Intel官方最新版的librealsense版本与ROS1的ROS Wrapper是 版本不一致的 ,且ROS Wrapper支持的是较低版本的SDK ,具体可以去网站查看 如果完全

    2024年02月07日
    浏览(53)
  • realsense D435i 实现外部时钟触发硬件同步多相机数据采集

    最近有一个调试D435i相机的工作,需要使得三个相机能够完成硬件触发的同步,具体来说,就是有一个固定频率的外部脉冲信号,使得三个相机能够根据外部脉冲信号的硬件触发完成双目图片、深度图片、彩色图片、IMU数据的实时响应采集,因为外部脉冲信号是通过一个精确

    2024年01月16日
    浏览(48)
  • Realsense d435i驱动安装、配置及校准

    写在前面 本文是在ubuntu20.04下安装,其它版本大同小异。可能出现的问题,主要由各自安装相关库版本不一致导致,故问题不一,但一般很好解决,正常情况下不会出现。 Intel Realsense 深度摄像头D435i将D435强大的深度感知能力和惯性测量单元(IMU)结合起来,可满足RGBD、单目、

    2024年02月02日
    浏览(50)
  • SLAM算法与工程实践——相机篇:RealSense D435使用(2)

    下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 下面是专栏地址: 这个系列的文章是分享SLAM相关技术算法的学习和工程实践 参考: realsense相机两种获取相机内外参的方式 使用Realsense D435i运行VINS-Fusion kalibr标定realsenseD435i --多相机标定

    2024年02月03日
    浏览(67)
  • 机械臂手眼标定realsense d435相机——眼在手上python、matlab

    两周内看了好多博客,博客上的代码甚至github上的代码都试过了一遍,各种语言matlab、c++、python,了解到了许多做手眼标定的平台——halcon、ros(这俩还需要从头开始学,时间不太够用),最后看到了鱼香ros的博客,参考了一下并总结完整,附链接 此博客仅记录学习过程总结

    2024年02月15日
    浏览(64)
  • C++ api调用realsense d435相机,并计算真实世界坐标值

            在使用Intel RealSense相机进行编程时,首先需要创建一个 rs2::pipeline 对象,并使用该对象启动相机的数据流。在启动数据流后,相机将根据配置的参数生成相应的数据流,例如深度、彩色或红外流,并将这些数据传输到计算机中。 RS2_STREAM_DEPTH :指定启用的流类型为

    2024年02月11日
    浏览(45)
  • C++ api调用realsense d435相机,将坐标转换到相机坐标系

            在使用Intel RealSense相机进行编程时,首先需要创建一个 rs2::pipeline 对象,并使用该对象启动相机的数据流。在启动数据流后,相机将根据配置的参数生成相应的数据流,例如深度、彩色或红外流,并将这些数据传输到计算机中。 RS2_STREAM_DEPTH :指定启用的流类型为

    2024年02月16日
    浏览(48)
  • Realsense D435i Yolov5目标检测实时获得目标三维位置信息

    - Colorimage: - Colorimage and depthimage: 1.一个可以运行YOLOv5的python环境 2.一个realsense相机和pyrealsense2库 在下面两个环境中测试成功 win10 python 3.8 Pytorch 1.10.2+gpu CUDA 11.3 NVIDIA GeForce MX150 ubuntu16.04 python 3.6 Pytorch 1.7.1+cpu 修改模型配置文件,以yolov5s为例。 如果使用自己训练的模型,需要进

    2024年02月04日
    浏览(62)
  • ubuntu18.04安装Realsense D435i相机SDK及realsense-ros记录,为后期运行yolo v5作准备

    写在前面 :一定要注意各个版本之间的匹配问题,否则会报各种错误。 例如ROS版本和librealsense SDK版本之间的对应关系,以及realsense-ros(Wrapper)与librealsense SDK之间的对应关系 。 系统:ubuntu18.04 ros: melodic 附上Intel® RealSense github网站: https://github.com/IntelRealSense 以及安装教程

    2024年02月05日
    浏览(54)
  • 使用D435i相机录制TUM格式的数据集

    本文写于2023年3月14日。 D435i相机的rgb图像与depth图像的像素没有对齐,在此记录一下如何像素对齐 Ubuntu18.04 + ROS melodic 这一步需要使用 InterRealSenseD435i SDK2 ,可以参考此链接安装。 打开 Intel RealSense Viewer 。设置 Depth Stream 以及 Color Stream 的图像分辨率为 640 × 480 ,设置采集帧率

    2024年02月09日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包