(17)Python读取摄像头并实现视频播放、暂停、指定目录保存、回放功能
读取摄像头并播放、暂停功能
- import sys
- #import scipy.io as sio
- from PyQt5 import QtGui, QtCore, QtWidgets
- #from wyc import Ui_Form
- import cv2
- import numpy as np
- class VideoCapture(QtWidgets.QWidget):
- def __init__(self, filename, parent):
- super(QtWidgets.QWidget, self).__init__()
- self.cap = cv2.VideoCapture(0)
- self.video_frame = QtWidgets.QLabel()
- parent.layout.addWidget(self.video_frame)
- def nextFrameSlot(self):
- ret, frame = self.cap.read()
- # frame = cv2.cvtColor(frame, cv2.cv.CV_BGR2RGB)
- frame2 = np.zeros((frame.shape), dtype=np.int8)
- # BGR
- frame2[:, :, 0] = frame[:, :, 2]
- frame2[:, :, 1] = frame[:, :, 1]
- frame2[:, :, 2] = frame[:, :, 0]
- img = QtGui.QImage(frame2, frame2.shape[1], frame2.shape[0], QtGui.QImage.Format_RGB888)
- pix = QtGui.QPixmap.fromImage(img)
- self.video_frame.setPixmap(pix)
- def start(self):
- self.timer = QtCore.QTimer()
- self.timer.timeout.connect(self.nextFrameSlot)
- self.timer.start(1000.0/30)
- def pause(self):
- self.timer.stop()
- def deleteLater(self):
- self.cap.release()
- super(QtGui.QWidget, self).deleteLater()
- class VideoDisplayWidget(QtWidgets.QWidget):
- def __init__(self,parent):
- super(VideoDisplayWidget, self).__init__(parent)
- self.layout = QtWidgets.QFormLayout(self)
- self.startButton = QtWidgets.QPushButton('播放', parent)
- self.startButton.clicked.connect(parent.startCapture)
- self.startButton.setFixedWidth(50)
- self.pauseButton = QtWidgets.QPushButton('暂停', parent)
- self.pauseButton.setFixedWidth(50)
- self.layout.addRow(self.startButton, self.pauseButton)
- self.setLayout(self.layout)
- class ControlWindow(QtWidgets.QMainWindow):
- def __init__(self):
- super(ControlWindow, self).__init__()
- self.setGeometry(100, 100, 800, 600)
- self.setWindowTitle("视频显示demo")
- self.capture = None
- self.matPosFileName = None
- self.videoFileName = None
- self.positionData = None
- self.updatedPositionData = {'red_x':[], 'red_y':[], 'green_x':[], 'green_y': [], 'distance': []}
- self.updatedMatPosFileName = None
- self.isVideoFileLoaded = True
- self.isPositionFileLoaded = True
- self.quitAction = QtWidgets.QAction("&Exit", self)
- self.quitAction.setShortcut("Ctrl+Q")
- self.quitAction.setStatusTip('Close The App')
- self.quitAction.triggered.connect(self.closeApplication)
- # self.openMatFile = QtWidgets.QAction("&Open Position File", self)
- # self.openMatFile.setShortcut("Ctrl+Shift+T")
- # self.openMatFile.setStatusTip('Open .mat File')
- # self.openMatFile.triggered.connect(self.loadPosMatFile)
- # self.openVideoFile = QtWidgets.QAction("&Open Video File", self)
- # self.openVideoFile.setShortcut("Ctrl+Shift+V")
- # self.openVideoFile.setStatusTip('Open .h264 File')
- # self.openVideoFile.triggered.connect(self.loadVideoFile)
- # self.mainMenu = self.menuBar()
- # self.fileMenu = self.mainMenu.addMenu('&File')
- # self.fileMenu.addAction(self.openMatFile)
- # self.fileMenu.addAction(self.openVideoFile)
- # self.fileMenu.addAction(self.quitAction)
- self.videoDisplayWidget = VideoDisplayWidget(self)
- self.setCentralWidget(self.videoDisplayWidget)
- def startCapture(self):
- if not self.capture and self.isPositionFileLoaded and self.isVideoFileLoaded:
- self.capture = VideoCapture(self.videoFileName, self.videoDisplayWidget)
- self.videoDisplayWidget.pauseButton.clicked.connect(self.capture.pause)
- self.capture.start()
- def endCapture(self):
- self.capture.deleteLater()
- self.capture = None
- # def loadPosMatFile(self):
- # try:
- # self.matPosFileName = str(QtGui.QFileDialog.getOpenFileName(self, 'Select .mat position File'))
- # self.positionData = sio.loadmat(self.matPosFileName)
- # self.isPositionFileLoaded = True
- # except:
- # print("Please select a .mat file")
- # def loadVideoFile(self):
- # try:
- # self.videoFileName = QtGui.QFileDialog.getOpenFileName(self, 'Select .h264 Video File')
- # self.isVideoFileLoaded = True
- # except:
- # print("Please select a .h264 file")
- def closeApplication(self):
- choice = QtGui.QMessageBox.question(self, 'Message','Do you really want to exit?',QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
- if choice == QtGui.QMessageBox.Yes:
- print("Closing....")
- sys.exit()
- else:
- pass
- if __name__ == '__main__':
- import sys
- app = QtWidgets.QApplication(sys.argv)
- window = ControlWindow()
- window.show()
- sys.exit(app.exec_())
回放、指定目录保存功能
- 以时间戳的形式保存视频:
- import cv2
- import datetime
- cap = cv2.VideoCapture(0)
- import os.path
- save_path = 'G:/Temp/' #以特定前缀保存视频文件到指定目录
- timeNow = "%s.avi" % (datetime.datetime.now().strftime('%Y_%m_%d_%H-%M-0%S'))
- completeName = os.path.join(save_path, timeNow)
- out = (cv2.VideoWriter(timeNow, cv2.VideoWriter_fourcc(*'PIM1'), 30.0, (640, 480))) #第三个参数是帧率
- while cap.isOpened():
- ret, frame = cap.read()
- if ret==True:
- out.write(frame)
- cv2.imshow('frame', frame)
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
- else:
- break
- # Release everything if job is finished
- cap.release()
- out.release()
- cv2.destroyAllWindows()
- 回放视频:
- import os
- def videoBack(self):
- os.startfile("G:/Tx2Project/VideoShow") #录制的视频存放文件
(17)Python读取摄像头并实现视频播放、暂停、指定目录保存、回放功能的更多相关文章
- 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图
作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...
- python读取文件通过正则过滤需要信息然后保存到新文件里
import osimport reimport fileinput def getDataFromFile(): rt = "/(.*)/(.*).apk" ...
- python实现上传文件到linux指定目录
今天接到一个小需求,就是想在windows环境下,上传压缩文件到linux指定的目录位置并且解压出来,然后我想了一下,这个可以用python试试写下. 环境:1.linux操作系统一台2.window ...
- 【Python】自动生成html文件查看指定目录中的所有图片
获取本目录下的pic子目录中的所有图片(jpg,png,bmp,gif等,此处以jpg文件为例),然后生成一个image.html文件,打开该html文件即可在浏览器中查看pic子目录中的所有图片. ...
- python zip压缩文件 并移动到指定目录
需要引入的3个包: import os import shutil import zipfile 1. # 创建zip文件对象your_zip_file_obj = zipfile.ZipFile(' ...
- Python 解压缩Zip和Rar文件到指定目录
#__author__ = 'Joker'# -*- coding:utf-8 -*-import urllibimport osimport os.pathimport zipfilefrom zi ...
- Python读取JSON数据,并解决字符集不匹配问题
今天来谈一谈Python解析JSON数据,并写入到本地文件的一个小例子. – 思路如下 从一个返回JSON天气数据的网站获取到目标JSON数据串 使用Python解析出需要的部分 写入到本地文件,供其 ...
- 最简单的基于FFmpeg的AVDevice例子(读取摄像头)
=====================================================最简单的基于FFmpeg的AVDevice例子文章列表: 最简单的基于FFmpeg的AVDev ...
- Python 读取图像文件的性能对比
Python 读取图像文件的性能对比 使用 Python 读取一个保存在本地硬盘上的视频文件,视频文件的编码方式是使用的原始的 RGBA 格式写入的,即无压缩的原始视频文件.最开始直接使用 Pytho ...
随机推荐
- .net core 学习小结之 JWT 认证授权
新增配置文件 { "Logging": { "IncludeScopes": false, "Debug": { "LogLeve ...
- 杭州集训Day5
下面是Day5的题目!(其实都咕了好几天了 100+70+40=210. T1 皇后 XY 的疑难 (1s 512MB) 1.1 题目描述 有一个n*n的王国城堡地图上,皇后XY喜欢看骑士之间的战斗, ...
- JSP页面读取数据中的数据内容,出现乱码现象的解决方法
1.首先要确保JSP页面的编码已修改为“utf-8”的字符编码: 2.然后再在jsp页面上添加代码进行设置: 先用getBytes()方法读出数据,然后再new String()方法设置格式为“utf ...
- 洛谷 P5661 公交换乘 & [NOIP2019普及组] (模拟)
传送门 解题思路 先把所有的数据读下来. 对于地铁,答案直接加,然后把编号放入一个数组a内. 对于公交车,从前往后枚举a数组,然后找到出现最早的且符合价钱大于等于公交车的价钱,然后把这个数删除(变为0 ...
- TestCase维护和思维导图
在软件整个生命周期中,测试应该尽早地开始,因为测试对象不只是程序,还有文档和数据,所以针对需求分析说明书.概要设计和详细设计说明书,测试如何快速理解项目需求,进行下一步的工作呢? 本人觉得,如果只是看 ...
- PythonDay06
第六章 今日内容 小数据池 深浅拷贝 集合 小数据池 == is id == 判断两个值是否相等 is --- 是 判断两个值的内存地址是否相等 代码块:一个py文件,一个函数,一个模块,终端中每一行 ...
- C++ delete仍可访问的问题
C++ delete和置为NULL 先上一段代码: class Object { public: explicit Object(int num) : m_num(num){} void functi ...
- vuex辅助函数和vuex5个属性
在上篇中,我们可以知道如果想要访问vuex.store中state中的数据,需要this.$store.state.属性名.显然这样访问数据写的代码很很不简洁的,辅助函数就是用来解决这个问题的. 1. ...
- SpringMVC+Spring4+Mybatis3
http://blog.csdn.net/jiuqiyuliang/article/details/45286191 http://blog.csdn.net/jiuqiyuliang/article ...
- 40. Combination Sum II (JAVA)
Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...