PyQt5_工业摄像头采集的帧数据实时显示到QLabel

# -*- coding: utf-8 -*-
 
from dvp import *               #将对应操作系统的dvp.pyd或dvp.so放入python安装目录下的Lib目录或者工程目录

import PyQt5
 
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QThread, pyqtSignal#多线程
from PyQt5.QtCore import Qt#缩放

from UI import Ui_MainWindow

class MyWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setupUi(self)

        #按钮事件信号槽
        self.Open.clicked.connect(self.OpenCamera)

        #采集线程
        self.mythread = MyThread() # 实例化自己建立的任务线程类
        self.mythread.signal.connect(self.image_callback) #设置任务线程发射信号触发的函数

    def OpenCamera(self):
        global camera

        cameraInfo = Refresh()#刷新并获取相机列表
        camera = Camera(int(0))#以索引号的方式打开相机
        camera.Start()#启动视频流

        self.mythread.start() # 启动任务线程
        return None

    #=======================多线程回调
    def image_callback(self,image): # 这里的image就是任务线程传回的图像数据,类型必须是已经定义好的数据类型
        self.label.setPixmap(QPixmap.fromImage(image))
        return None

 #多线程类
class MyThread(QThread): # 建立一个任务线程类
    signal = pyqtSignal(QImage) #设置触发信号传递的参数数据类型,传递信号必须事先定义好数据类型
    def __init__(self):
        super(MyThread, self).__init__()

    def run(self): # 在启动线程后任务从这个函数里面开始执行
        global camera
        while 1:
            frame_t = camera.GetFrame(3000)#从相机采集图像数据,超时时间为3000毫秒
            frame, buffer = frame_t#帧数据,帧地址
            mat = QImage(buffer,frame.iWidth, frame.iHeight, QImage.Format_Indexed8)#转为QImage类型
            mat=mat.scaled(mat.width() * 0.5, mat.height() * 0.5,Qt.IgnoreAspectRatio, Qt.SmoothTransformation)#缩放图像,SmoothTransformation平滑缩放,FastTransformation快速缩放

            self.signal.emit(QImage(mat)) #任务线程发射信号,图像数据作为参数传递给主线程

if __name__ == "__main__":
 app = QApplication(sys.argv)
 mainWindow = MyWindow()
 mainWindow.show()
 sys.exit(app.exec_())

 

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值