pyqt5+opencv 实现读取视频数据的方法

1、openCV读取视频数据

import cv2

if __name__ == '__main__':
    videoPath = "./dataSet/3700000000003_13-38-20.055.mp4"
    nameWindow = "Detection window"  # 窗体名称
    cv2.namedWindow(nameWindow)  # 设置窗体
    capture = cv2.VideoCapture(videoPath)
    if capture.isOpened():
        size = (capture.get(cv2.CAP_PROP_FRAME_WIDTH), capture.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 读取帧的宽、高
        speed = capture.get(cv2.CAP_PROP_FPS)  # 获得帧速
        while True:
            ret, frame = capture.read()
            if ret:
                frame = cv2.resize(frame, (960, 540))
                cv2.imshow(nameWindow, frame)
                if cv2.waitKey(1) & 0xFF == 27:
                    break
            else:
                break
        capture.release()
        cv2.destroyAllWindows()
    else:
        print("摄像头或视频读取失败")

2、openCV集成pyqt5读取视频数据

import cv2
import numpy as np
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class Video():
    def __init__(self, capture):
        self.capture = capture
        self.currentFrame = np.array([])
    def captureNextFrame(self):
        ret, readFrame = self.capture.read()
        if (ret == True):
            self.currentFrame = cv2.resize(readFrame, (960, 540))
    def convertFrame(self):
        try:
            height, width, channel = self.currentFrame.shape
            bytesPerLine = 3 * width
            qImg = QImage(self.currentFrame.data, width, height, bytesPerLine,
                               QImage.Format_RGB888).rgbSwapped()
            qImg = QPixmap.fromImage(qImg)
            return qImg
        except:
            return None
class win(QMainWindow):
    def __init__(self, parent=None):
        super().__init__()
        self.setGeometry(250, 80, 800, 600)  # 从屏幕(250,80)开始建立一个800*600的界面
        self.setWindowTitle('camera')
        self.videoPath = "./dataSet/3700000000003_13-38-20.055.mp4"
        self.video = Video(cv2.VideoCapture(self.videoPath))
        self._timer = QTimer(self)
        self._timer.timeout.connect(self.play)
        self._timer.start(27)
        self.update()
        self.videoFrame = QLabel('VideoCapture')
        self.videoFrame.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(self.videoFrame)          # 设置图像数据填充控件
    def play(self):
            self.video.captureNextFrame()
            self.videoFrame.setPixmap(self.video.convertFrame())
            self.videoFrame.setScaledContents(True)     # 设置图像自动填充控件
        except TypeError:
            print('No Frame')
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = win()
    win.show()
    sys.exit(app.exec_())

界面美化版:

import sys
import os
import cv2

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QPalette, QBrush, QPixmap
class Ui_MainWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Ui_MainWindow, self).__init__(parent)
        self.timer_camera = QtCore.QTimer()  # 初始化定时器
        self.cap = cv2.VideoCapture()  # 初始化摄像头
        self.CAM_NUM = r"D:\PycharmProjects\ele_good_pyqt5\dataSet\00.flv"
        self.set_ui()
        self.slot_init()
        self.__flag_work = 0
        self.x = 0
        self.count = 0
    def set_ui(self):
        self.__layout_main = QtWidgets.QHBoxLayout()  # 采用QHBoxLayout类,按照从左到右的顺序来添加控件
        self.__layout_fun_button = QtWidgets.QHBoxLayout()
        self.__layout_data_show = QtWidgets.QVBoxLayout()  # QVBoxLayout类垂直地摆放小部件
        self.button_open_camera = QtWidgets.QPushButton(u'打开相机')
        self.button_close = QtWidgets.QPushButton(u'退出')
        # button颜色修改
        button_color = [self.button_open_camera, self.button_close]
        for i in range(2):
            button_color[i].setStyleSheet("QPushButton{color:black}"
                                           "QPushButton:hover{color:red}"
                                           "QPushButton{background-color:rgb(78,255,255)}"
                                           "QpushButton{border:2px}"
                                           "QPushButton{border_radius:10px}"
                                           "QPushButton{padding:2px 4px}")
        self.button_open_camera.setMinimumHeight(50)
        self.button_close.setMinimumHeight(50)
        # move()方法是移动窗口在屏幕上的位置到x = 500,y = 500的位置上
        self.move(500, 500)
        # 信息显示
        self.label_show_camera = QtWidgets.QLabel()
        self.label_move = QtWidgets.QLabel()
        self.label_move.setFixedSize(100, 100)
        self.label_show_camera.setFixedSize(641, 481)
        self.label_show_camera.setAutoFillBackground(False)
        self.__layout_fun_button.addWidget(self.button_open_camera)
        self.__layout_fun_button.addWidget(self.button_close)
        self.__layout_fun_button.addWidget(self.label_move)
        self.__layout_main.addLayout(self.__layout_fun_button)
        self.__layout_main.addWidget(self.label_show_camera)
        self.setLayout(self.__layout_main)
        self.label_move.raise_()            # 设置控件在最上层
        self.setWindowTitle(u'摄像头')
        '''
        # 设置背景颜色
        palette1 = QPalette()
        palette1.setBrush(self.backgroundRole(),QBrush(QPixmap('background.jpg')))
        self.setPalette(palette1)
    def slot_init(self):  # 建立通信连接
        self.button_open_camera.clicked.connect(self.button_open_camera_click)
        self.timer_camera.timeout.connect(self.show_camera)
        self.button_close.clicked.connect(self.close)
    def button_open_camera_click(self):
        if self.timer_camera.isActive() == False:
            flag = self.cap.open(self.CAM_NUM)      # 打开摄像头操作
            if flag == False:
                msg = QtWidgets.QMessageBox.Warning(self, u'Warning', u'请检测相机与电脑是否连接正确',
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)
                # if msg==QtGui.QMessageBox.Cancel:
                #                     pass
            else:
                self.timer_camera.start(30)
                self.button_open_camera.setText(u'关闭相机')        # 将控件内容设置为关闭
        else:
            self.timer_camera.stop()
            self.cap.release()
            self.label_show_camera.clear()
            self.button_open_camera.setText(u'打开相机')
    def show_camera(self):
        flag, self.image = self.cap.read()      # 读取摄像头数据
        show = cv2.resize(self.image, (640, 480))
        show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
        showImage = QtGui.QImage(show.data, show.shape[1], show.shape[0], QtGui.QImage.Format_RGB888)
        self.label_show_camera.setPixmap(QtGui.QPixmap.fromImage(showImage))
    def closeEvent(self, event):
        print("关闭")
        ok = QtWidgets.QPushButton()
        cancel = QtWidgets.QPushButton()
        msg = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning, u'关闭', u'是否关闭!')
        msg.addButton(ok, QtWidgets.QMessageBox.ActionRole)
        msg.addButton(cancel, QtWidgets.QMessageBox.RejectRole)
        ok.setText(u'确定')
        cancel.setText(u'取消')
        if msg.exec_() == QtWidgets.QMessageBox.RejectRole:
            event.ignore()
            if self.cap.isOpened():
                self.cap.release()
            if self.timer_camera.isActive():
                self.timer_camera.stop()
            event.accept()
if __name__ == '__main__':
    App = QApplication(sys.argv)
    win = Ui_MainWindow()
    win.show()
    sys.exit(App.exec_())

显示效果如下所示:

到此这篇关于pyqt5+opencv 实现读取视频数据的文章就介绍到这了,更多相关pyqt5 opencv读取视频数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统

    基于python opencv人脸识别的签到系统前言先看下效果实现的功能开始准备页面的构建功能实现代码部分总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人脸实时签到系统,作者某二本大学里的末流学生,写于2019/09/,python学习期间. 今年7月份开始接触python的,最近闲着无事就开始做了这个人脸识别的系统,一开始的话就想着简单的弄下,就去了百度智能云用的api接口实现的,写完以后我就想为什么我不自己写一个人脸识别签到,不去调用百度api接口,然后就诞生了

  • Python+OpenCV+pyQt5录制双目摄像头视频的实例

    起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写一个.要是OpenCV+python.貌似很简单就能OK的事情,但是,我们的项目不是一般要展示给老师看嘛.谁愿意看一个没有界面的录制过程是吧~,最后会附上源代码~ 依赖的包 在这里,我直接把import的包写出来了各位可以进行对号入座,然后就能知道需要安装哪个包啦! import cv2 import numpy as np from PyQt5.QtWidge

  • opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器

    定位色块常用到hsv色彩空间下的颜色阈值,笔者曾经用openmv时,其IDE有自带一个阈值编辑器,使用起来非常方便,现在在linux上跑cv算法,需要类似的功能,因此自己写了一个阈值编辑器. 目前暂时只支持HSV色彩空间下的阈值编辑. 代码: mian.py: from threshold_ui import Ui_Widget from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QImage,QPixmap,QFon

  • PyQt5+Caffe+Opencv搭建人脸识别登录界面

    最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的想法是用opencv自带的人脸检测算法检测出面部,利用caffe训练好的卷积神经网络来提取特征,通过计算当前检测到的人脸与已近注册的所有用户的面部特征之间的相似度,如果最大的相似度大于一个阈值,就可以确定当前检测到的人脸对应为这个相似度最大的用户了. ###Caffe人脸识别 因为不断有新的用户加入,然而添加新用户后重新调整CNN的网络结构太费时间,所以不能用CN

  • pyqt5+opencv 实现读取视频数据的方法

    1.openCV读取视频数据 import cv2 if __name__ == '__main__': videoPath = "./dataSet/3700000000003_13-38-20.055.mp4" nameWindow = "Detection window" # 窗体名称 cv2.namedWindow(nameWindow) # 设置窗体 capture = cv2.VideoCapture(videoPath) if capture.isOp

  • pygame+opencv实现读取视频帧的方法示例

    由于pygame.movie.Movie.play() 只支持MPEG格式的视频,且 pygame版本大于1.9.5好像已经不支持这个模块了,所以决定使用与opencv读取视频帧的画面,利用pygame的surface刷新窗口. 有基础的小伙伴,代码还是很好理解,直接上代码 pygame.time.Clock()同步时间 import pygame from pygame.locals import * import cv2 import sys import time FPS = 30 Fra

  • 使用MSScriptControl 在 C# 中读取json数据的方法

    C#中已经有JavaScriptSerializer类可以将json数据给反序列化为对象 /// <summary> /// JSON文本转对象,泛型方法 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="jsonText">JSON文本</param> /// <returns>指定类型的对

  • pyqt5 tablewidget 利用线程动态刷新数据的方法

    问题 知道要用线程,所以就先尝试写了一个线程,然后每次都获取数据,然后直接通过这种方法来朝table里面更新数据. #python代码 table=MainWindow_ui.tableWidget_2 table.setItem(i,0,QtWidgets.QTableWidgetItem(str(jcb.Name))) 发现数据并不是想象中跟线程运行那样实时的,要点一下才能显示出数据来 并且还会出现一些问题 问题图片 为了做出对比,我将作业名的表格填写改成table.setItem的方式,其

  • python利用thrift服务读取hbase数据的方法

    因工作需要用python通过hbase的thrift服务读取Hbase表数据,发现公司的测试环境还不支持,于是自己动手准备环境,在此我将在安装步骤尽可能描述清楚,旨在给第一次动手安装的朋友,此过程亲测成功! 安装过程如下: 1.首先确保hbase安装测试成功,再者确认下hbase的thrift服务是否启动,注意目前的Hbase(本文基于版本0.98.17)有两套thrift接口thrift和thrift2,本文使用thrift,启动命令:hbase thrift -p 9090 start,确保

  • PyQT5 实现快捷键复制表格数据的方法示例

    本文主要介绍了PyQT5 实现快捷键复制表格数据的方法示例,分享给大家,具体如下: 表格数据如下: # -*- coding:utf-8 -*- import pyperclip from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QStandardItemModel, QStandardItem from PyQt5.QtCore import Qt from PyQt5 import QtCore

  • R语言读取excel数据的方法(两行命令)

    安装库 安装xlsx install.packages("xlsx") 使用 library(xlsx) ray = read.xlsx('D:/Code/R/Data in Excel/Chapter 8/gamma-ray.xls',1) 后面的参数,第一个放地址,第二个放具体sheet页(这里除了可以放数值之外,还可以放对应的名字(字符串)).除此之外,还可以使用encoding="utf-8"的方式来定义使用中文数据. 效果: > a = read.x

  • Java实现日志文件监听并读取相关数据的方法实践

    目录 项目需求 Apache Commons-IO 核心知识 代码实现 总结 项目需求 由于所在数据中台项目组需要实现监听文件夹或者日志文件并读取对应格式的脏数据的需求,以便在文件.文件夹发生变化时进行相应的业务流程:所以在这里记录下相关业务的实现及技术选型. Apache Commons-IO 首先需要添加对应依赖: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</

  • opencv实现读取视频保存视频

    不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的 #include <iostream> #include <assert.h> #include <opencv/cv.h> #include <opencv/highgui.h> #inclu

  • VC6.0实现读取Excel数据的方法

    Excel是常用的办公软件之一,本文以Excel2003为例说明VC程序读取Excel文件的方法.具体步骤如下:   1.首先要将excel类添加到工程中. 在ClassWizard中,[Add Class],在Excel的安装目录找到Excel.exe(Microsoft2003是Excel.exe:2007应该又独立的lib库,这个没有验证),添加必要的几个类: // Excel应用对象 _Application m_oExcelApp; // Excel程序 _Worksheet m_oW

随机推荐