一.前言概述

摄像头显示
创建摄像头操作类:完成摄像头的采集功能
当需要摄像头完成一个功能时,就调用摄像头对象的一个函数去完成
实现一个摄像头类:
添加
打开摄像头
获取摄像头的实时数据
数据进行转换提供给界面
界面类:
添加
显示画面到界面中
显示画面需要循环一直显示
需要定时器进行定时,定时时间到达就产生信号,关联上一个槽函数,当信号调用时就会主动调用槽函数;
在qt中存在一个机制:信号可以关联上另一个函数,另一个函数会在产生这个对应的信号的时候就会调用-----信号槽机制
在组件中存在一些特定的信号,当组件执行某个操作的时候,这时对应的信号就会被激活(信号产生)
由于信号(如点击),可能执行的功能是不一样的,信号关联一个槽函数,信号产生会执行槽函数完成功能的执行
需要指定信号与槽函数的关联,信号要去执行的功能是什么信号对象.信号.connect(函数)

时间显示

二. 摄像头显示

新建一个python文件取名cameravideo
在这里插入图片描述读取摄像头操作

    def read_camera(self):
        ret,data = self.capture.read()
        if not ret:
            print("获取摄像头数据失败")
            return None
        return data

把数据转换成界面能显示的数据格式

    def camera_to_pic(self):
        pic = self.read_camera()
        #摄像头按BGR存储,需要转换为RGB格式
        #调用函数cvtColor,其完成后才是RGB格式的画面数据
        self.currentframe = cv2.cvtColor(pic,cv2.COLOR_BGR2RGB)
        #设置宽高
        #self.currentframe = cv2.cvtColor(self.currentframe,(640,480))

        #转换格式(界面能够显示的格式)
        #获取画面的宽度与高度
        height,width = self.currentframe.shape[:2]
        #先转换成QImage类型的图型/画面,创建QImage类对象,使用摄像头的画面数据
        #QImage(data,width,height,format)创建:数据,宽度,高度
        qimg = QImage(self.currentframe,width,height,QImage.Format_RGB888)
        qpixmap = QPixmap.fromImage(qimg)
        return qpixmap

关闭摄像头

#摄像头关闭
    def close_camera(self):
        self.capture.release()

作为摄像头,获取数据,显示画面的功能

    def show_cameradata(self):
        # 获取摄像头数据,转换数据
        pic = self.cameravideo.camera_to_pic()
        # 显示数据,显示画面
        self.label.setPixmap(pic)

只要能够不断重复调用这个函数,从摄像头获取数据进行显示
可以通过信号,信号关联当前函数,只要信号产生,函数就不断被调用
信号需要不断产生,可以通过定时器,定时时间到达就会产生信号
所以这里要使用命令关联对象

 self.actionopen.triggered.connect(self.on_actionopen)
 self.actionclose.triggered.connect(self.on_actionclose)

在这里插入图片描述
这里解释下actionopen,actionclose是我之前在窗口设计中填写中文前,所填写的信息
在这里插入图片描述
创建对应的启动签到函数

    def on_actionopen(self):
        print("on_actionopen")
        #启动摄像头
        self.cameravideo = camera()
        #启动定时器,进行定时,每隔多长时间进行一次获取摄像头数据进行显示
        self.timeshow = QTimer(self)
        self.timeshow.start(10)
        #10毫秒的定时器启动,每隔10毫秒就会产生一个信号timeout
        self.timeshow.timeout().connect(self.show_cameradata)

创建关闭签到函数

    def on_actionclose(self):
        print("on_actionclose")
        #关闭摄像头
        self.cameravideo.close_camera()
        #关闭定时器,不再获取摄像头数据进行显示
        self.timeshow.stop()
        self.label.setText("摄像头画面显示")

三.时间显示

这里我还不会设置动态时间,只能够读取当前时间日期并进行设置

#获取日期
        date = QDate.currentDate()
        print(date)
        self.dateEdit.setDate(date)
        #获取时间
        time = QTime.currentTime()
        print(time)
        self.timeEdit.setTime(time)
        #获取日期
        datatime = QDateTime.currentDateTime()
        print(datatime)

在这里插入图片描述

四.相关下载

代码下载:Face_Recognition_Project_2.zip

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐