前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt十讲 | 零基础使用摄像头捕获视频并显示

PyQt十讲 | 零基础使用摄像头捕获视频并显示

作者头像
潘永斌
发布2019-10-08 17:09:41
4.6K0
发布2019-10-08 17:09:41
举报
文章被收录于专栏:看那个码农看那个码农

本篇推文共计1500个字,阅读时间约2分钟。

OpenCV是一个开源的跨平台计算机视觉库,轻量,高效,由一系列 C 函数和少量 C++ 类构成,提供了Python、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV 是跨平台的,可以在 Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。

OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。

今天的推文里,我们来介绍一个利用Python中的Opencv库用电脑摄像头捕获视频并将视频实时显示出来的程序。

效果图:

在这个程序中,整个程序的各控件响应流程如下所示,主界面的视频框中显示的是程序槽函数根据定时器设置时间每隔30ms从摄像头捕获视频中抽取的一帧一帧图像。

开发工具准备

1.Pycharm 2019.1.3社区版

2.Anaconda(Python 3.6.0,PyQt5)

开发流程

1

因为之前开发程序时候都用了Qt designer,太依赖于Qt designer进行GUI设计,所以本次开发程序时,就采用代码形式进行控件布局,当然这得提前构思好界面的控件。

根据程序设计的内容进行主界面的设计。

利用Microsoft Visio设计的程序流程图如下:

这里的主界面采用的是QWidget,没有菜单栏,分别由两个Push button控件从上到下进行垂直布局,再将按键控件区域和Label控件区域进行水平布局。

相应代码为:

代码语言:javascript
复制
def set_ui(self):
        self.__layout_main = QtWidgets.QHBoxLayout() # 总布局
        self.__layout_fun_button = QtWidgets.QVBoxLayout() # 按键布局
        self.__layout_data_show = QtWidgets.QVBoxLayout() # 数据(视频)显示布局
        self.button_open_camera = QtWidgets.QPushButton('打开相机') # 建立用于打开摄像头的按键
        self.button_close = QtWidgets.QPushButton('退出') # 建立用于退出程序的按键
        self.button_open_camera.setMinimumHeight(50) # 设置按键大小
        self.button_close.setMinimumHeight(50)
        self.button_close.move(10, 100) # 移动按键
        '''信息显示'''
        self.label_show_camera = QtWidgets.QLabel() # 定义显示视频的Label
        self.label_show_camera.setFixedSize(641, 481) # 给显示视频的Label设置大小为641x481
        '''把按键加入到按键布局中'''
        self.__layout_fun_button.addWidget(self.button_open_camera) # 把打开摄像头的按键放到按键布局中
        self.__layout_fun_button.addWidget(self.button_close) # 把退出程序的按键放到按键布局中
        '''把某些控件加入到总布局中'''
        self.__layout_main.addLayout(self.__layout_fun_button) # 把按键布局加入到总布局中
        self.__layout_main.addWidget(self.label_show_camera) # 把用于显示视频的Label加入到总布局中
        '''总布局布置好后就可以把总布局作为参数传入下面函数'''
        self.setLayout(self.__layout_main) # 到这步才会显示所有控件

此处进行控件布局的时候是先设置了总布局,按键布局。将按键布局设置好了之后,再结合Label标签在总布局中进行水平布局。

2

编写对应的槽函数代码:

代码语言:javascript
复制
def button_open_camera_clicked(self):
        if self.timer_camera.isActive() == False: # 若定时器未启动
            flag = self.cap.open(self.CAM_NUM) # 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
            if flag == False: # flag表示open()成不成功
                msg = QtWidgets.QMessageBox.warning(self, 'warning', "请检查相机于电脑是否连接正确", buttons=QtWidgets.QMessageBox.Ok)
            else:
                self.timer_camera.start(30) # 定时器开始计时30ms,结果是每过30ms从摄像头中取一帧显示
                self.button_open_camera.setText('关闭相机')
        else:
            self.timer_camera.stop() # 关闭定时器
            self.cap.release() # 释放视频流
            self.label_show_camera.clear() # 清空视频显示区域
            self.button_open_camera.setText('打开相机')

此处代码的含义是编辑“打开视频”按钮控件的槽函数功能,启动电脑自带的摄像头,并设置截取捕获图像的时间。按照设置时间区间返回捕获图像。

3

整个程序运行起来如下所示:

以上就是今天介绍的

从摄像头捕获视频并显示的设计流程

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 看那个码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档