PyQt5下+OpenCV启动摄像头

PyQt5下+OpenCV启动摄像头

  1. 第一步:用PyQt5下的QtDesigner设计界面,如下:

PyQt5下+OpenCV启动摄像头
在:
1、摄像头为QLabel,大小设置为640X480,这也是笔记本上普通摄像头的分辨率。如果有高清摄像头,可以根据实际情况设置分辨率也行的,或者在打开摄像头后,调整图片的大小。
2、有两个QPushButton,其中,“开始”按钮为启动摄像头,启动后显示为“暂停”。“退出”按钮点击后直接终止程序运行。

ui设计完成后,用PYQT的转换工具,转换为ui_mainwindow.py文件。

第 2 步:定义按钮功能、设计定时器和图像处理。
1)启动和关闭摄像头设计

def btn_start(self):
    if self.btn_status:
        self.btn_status = False
    else:
        self.btn_status = True
    
    if self.btn_status:
        self.pushButton.setText('暂停')
        self.my_timer.start(40)     # 25fps
        self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # start camera
    else:
        self.pushButton.setText('开始')
        self.label.clear()      # 清楚label内容
        self.my_timer.stop()    # 停止定时器    
        self.cap.release()      # 关闭摄像头入代码片

2)在初始化代码中,定义定时器,以及按钮状态设置

    def __init__(self) -> None:
        super().__init__()
        self.setupUi(self)

        '''自定义部分'''
        self.my_timer = QTimer()        # 创建定时器
        self.my_timer.timeout.connect(self.my_timer_cb)     # 创建定时器任务

        '''按钮状态控制'''
        self.btn_status = False

3)在定时任务中,完成摄像头数据捕获和基本处理,并转化为PyQt5格式。
补充点:图像提取后,可以增强图像处理,如:人脸识别、视频文件存储等(此处不再提供)

    def my_timer_cb(self):
        if self.cap:
            """图像获取"""
            ret, self.image = self.cap.read()
            show = cv2.resize(self.image,(640,480))
            show = cv2.flip(show, 1)
            show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)

            """图像处理"""

            """处理结果存储"""

            """结果呈现"""
            showImage = QImage(show.data, show.shape[1],show.shape[0],QImage.Format_RGB888)
            self.label.setPixmap(QPixmap.fromImage(showImage))

最后:完整代码如下。

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File    :   run.py
@Time    :   2022/03/23 14:24:02
@Author  :   xxxxxxxxx
@Version :   1.00.000
@Contact :   xxxxxxx@qq.com
@License :   (C)Copyright 2022, Info Analysis and Insight for Future Studios
@https   :   None
@Desc    :   启动程序
'''

# here put the import lib
import sys

# from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import QImage, QPixmap


from ui.Ui_mainwin import Ui_MainWindow

import numpy as np
import cv2

class UI_main(QMainWindow, Ui_MainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.setupUi(self)

        '''自定义部分'''
        self.my_timer = QTimer()        # 创建定时器
        self.my_timer.timeout.connect(self.my_timer_cb)     # 创建定时器任务

        '''按钮状态控制'''
        self.btn_status = False

    '''加载所有的命令'''
    def action_list(self):
        self.btn_start()

    '''所有命令详细定义'''
    def btn_start(self):
        if self.btn_status:
            self.btn_status = False
        else:
            self.btn_status = True
        
        if self.btn_status:
            self.pushButton.setText('暂停')
            self.my_timer.start(40)     # 25fps
            self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # start camera
        else:
            self.pushButton.setText('开始')
            self.label.clear()      # 清楚label内容
            self.my_timer.stop()    # 停止定时器    
            self.cap.release()      # 关闭摄像头

    def my_timer_cb(self):
        if self.cap:
            """图像获取"""
            ret, self.image = self.cap.read()
            show = cv2.resize(self.image,(640,480))
            show = cv2.flip(show, 1)
            show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)

            """图像处理"""

            """处理结果存储"""

            """结果呈现"""
            showImage = QImage(show.data, show.shape[1],show.shape[0],QImage.Format_RGB888)
            self.label.setPixmap(QPixmap.fromImage(showImage))


if __name__ == '__main__':
    app = QApplication(sys.argv)

    ui = UI_main()
    ui.show()

    sys.exit(app.exec_())

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月24日 下午3:21
下一篇 2022年3月24日 下午3:41

相关推荐