pyside2实时显示realsense深度摄像头数据

10 篇文章 0 订阅

pyside2实时显示realsense深度摄像头数据

需求

读取realsense每帧图像显示在pyside的QLabel上,使用的realsenese摄像头型号为D415

安装pyside2指令

pip install pyside2

实现流程

1.引入依赖

# 这是我页面文件引入的依赖
import time
import subprocess
import threading as th
from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
    QObject, QPoint, QRect, QSize, QTime, QUrl, Qt, Signal, Slot)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
    QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
    QPixmap, QRadialGradient, QImage)
from PySide2.QtWidgets import *
import pyrealsense2 as rs
import numpy as np
import json

2.创建发送图像信号

# 在对应的页面类的内部
# 例如第六步的Ui_Main类内部,与def定义的函数同级
dis_update = Signal(QPixmap)

3.定义调用realsense函数

def open_realsense(self):
        pipeline = rs.pipeline()
        config = rs.config()
        config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 30)
        config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 30)

        profile = pipeline.start(config)
        frames = pipeline.wait_for_frames()
        color_frame = frames.get_color_frame()
        # Color Intrinsics
        intr = color_frame.profile.as_video_stream_profile().intrinsics

        align_to = rs.stream.color
        align = rs.align(align_to)
        while True:
            frames = pipeline.wait_for_frames()
            aligned_frames = align.process(frames)

            aligned_depth_frame = aligned_frames.get_depth_frame()
            color_frame = aligned_frames.get_color_frame()
            if not aligned_depth_frame or not color_frame:
                continue
            c = np.asanyarray(color_frame.get_data())
            qimage = QImage(c, 1280, 720, QImage.Format_BGR888)
            pixmap = QPixmap.fromImage(qimage)
            self.dis_update.emit(pixmap)
            time.sleep(DELAY)
        pipeline.stop()

4.定义子线程执行开启摄像头

def open_camera(self):	
	# target选择开启摄像头的函数
	t = th.Thread(target=self.open_realsense)
	t.start()

5.将图像信号更新到QLabel

def camera_view(self, c):
		# 调用setPixmap函数设置显示Pixmap
        self.label_12.setPixmap(c)
        # 调用setScaledContents将图像比例化显示在QLabel上
        self.label_12.setScaledContents(True)

6.定义信号与槽函数连接

在页面对应的类与Ui设置函数里设置信号与槽函数连接

# 你的界面类
class Ui_Main(QObject):
	def setupUi(self, Main):
		# 信号与槽函数绑定
		self.dis_update.connect(self.camera_view)

7.主线程调用

class Main(QMainWindow):
    def __init__(self):
        super(Main, self).__init__()
        self.ui = Ui_Main()
        self.ui.setupUi(self)

    def updateStatusBar(self, str):
        self.ui.statusBar.showMessage(str)

if __name__ == "__main__":
    app = QApplication([])
    widget = Main()
    widget.showFullScreen()
    widget.updateStatusBar("系统已准备,  Avatar version: 1.0")
    widget.show()
    widget.ui.open_camera()
    sys.exit(app.exec_())

测试效果

测试效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值