准备这一两个月看看以前的书,另外学习下视频方面的东西(CV方面)。
之前学过几天QT/PyQt,于是用PyQt结合OpenCV,做了一个小程序。具有播放并保存摄像头捕获组成的视频,以及播放本地视频文件两个小功能。
界面很简单,没图没真相 。
代码就100多行,很容易看懂。最后感叹下OpenCV和python的强大,噢,还有QT/PyQt。。
#! /usr/bin/env python
#coding=utf-8
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
import opencv
from PIL import Image
#this is important for capturing/displaying images
from opencv import highgui
from opencv import cv
import time
MPEG1VIDEO = 0x314D4950
camera = highgui.cvCreateCameraCapture(0)#找摄像头,一般填0-99都可以
class MainWindow(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self)
self.resize(550, 550)
self.setWindowTitle('vedio control')
self.status = 0 #0 is init status;1 is play video; 2 is capture video
self.image = QImage()
#录制的视频保存位置、格式等参数设定
self.videowriter = highgui.cvCreateVideoWriter("test.mpg", highgui.CV_FOURCC('m','p','g','1'), 25, cv.cvSize(200,200), 1)
#播放的视频位置
self.playcapture = highgui.cvCreateFileCapture("test.avi")
#初始化按钮
self.capturebtn = QPushButton('capture')
self.playbtn = QPushButton('play')
exitbtn = QPushButton('exit')
# 界面布局
vbox = QVBoxLayout()
vbox.addWidget(self.capturebtn)
vbox.addWidget(self.playbtn)
vbox.addWidget(exitbtn)
self.piclabel = QLabel('pic')
hbox = QHBoxLayout()
hbox.addLayout(vbox)
hbox.addStretch(1)
hbox.addWidget(self.piclabel)
self.setLayout(hbox)
#加载初始页面
if self.image.load("1.jpg"):
self.piclabel.setPixmap(QPixmap.fromImage(self.image))
#设定定时器
self.timer = Timer() #录制视频
self.playtimer = Timer("updatePlay()")#播放视频
#信号--槽
self.connect(self.timer, SIGNAL("updateTime()"),
self.CaptureVGA)
self.connect(self.capturebtn, SIGNAL("clicked()"),
self.PauseBegin)
self.connect(self.playtimer, SIGNAL("updatePlay()"),
self.PlayVideo)
self.connect(self.playbtn, SIGNAL("clicked()"),
self.VideoPlayPause)
self.connect(exitbtn, SIGNAL("clicked()"),
app, SLOT("quit()"))
def PlayVideo(self):
im = highgui.cvQueryFrame(self.playcapture)
im = opencv.adaptors.Ipl2PIL(im)
im = im.convert('RGB').tostring('jpeg', 'RGB')
self.image.loadFromData(QByteArray(im))
self.piclabel.setPixmap(QPixmap.fromImage(self.image))
def VideoPlayPause(self):
self.status, playstr, capturestr = ((1, 'pause', 'capture'), (0, 'play', 'capture'), (1, 'pause', 'capture'))[self.status]#三种状态分别对应的显示、处理
self.playbtn.setText(playstr)
self.capturebtn.setText(capturestr)
if self.status is 1:#状态1,播放视频
self.timer.stop()
self.playtimer.start()
else:
self.playtimer.stop()
def PauseBegin(self):
self.status, playstr, capturestr = ((2, 'play', 'pause'), (2, 'play', 'pause'), (0, 'play', 'capture'))[self.status]
self.capturebtn.setText(capturestr)
self.playbtn.setText(playstr)
print self.status, playstr, capturestr
if self.status is 2:#状态2,录制并显示视频
self.timer.start()
self.playtimer.stop()
else:
self.timer.stop()
def CaptureVGA(self):
im = highgui.cvQueryFrame(camera)
highgui.cvWriteFrame(self.videowriter, im)#录制视频,写入文件
#convert Ipl image to PIL image
im = opencv.adaptors.Ipl2PIL(im)
im = im.convert('RGB').tostring('jpeg', 'RGB')# 转换格式,jpeg
self.image.loadFromData(QByteArray(im))#格式支持QT,直接加载
#im.save('3.jpg')#opencv 返回的是Ipl 格式,QT无法直接显示。不知道如何转换格式,采用保存、读取的方式。
#pic.load('3.jpg')
self.piclabel.setPixmap(QPixmap.fromImage(self.image)) #一帧一帧的显示
class Timer(QThread):
def __init__(self, signal = "updateTime()", parent=None):
super(Timer, self).__init__(parent)
self.stoped = False
self.signal = signal
self.mutex = QMutex()
def run(self):
with QMutexLocker(self.mutex):
self.stoped = False
while True:
if self.stoped:
return
self.emit(SIGNAL(self.signal))
time.sleep(0.04) #40毫秒发送一次信号,每秒25帧
def stop(self):
with QMutexLocker(self.mutex):
self.stoped = True
def isStoped(self):
with QMutexLocker(sellf.mutex):
return self.stoped
if __name__ == "__main__" :
app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
相关推荐
基于pyqt5 + opencv实现的视频播放系统python源码+注释说明+测试视频.zip实现视频播放,支持实时流,支持远程文件。 基于pyqt5 + opencv实现的视频播放系统python源码+注释说明+测试视频.zip实现视频播放,支持实时...
# PyQt5+OpenCV播放本地视频GUI窗口 mp4等格式 1. 使用QTimer定时刷新画面 2. 播放/暂停按键
基于pyqt+OpenCV设计的用户密码或人脸识别登录GUI程序的完整代码及相关资料
pyqt5+opencv+matplotlib 实现的图像直方图代码 pyqt5+opencv+matplotlib 实现的图像直方图代码
毕业设计:行人检测系统,pyqt + opencv .zip
毕业设计:行人检测系统,pyqt + opencv.zip
# PyQt5+OpenCV+PyCharm使用本地摄像头并实时显示图像 GUI可视化 代码内写有详细注释 包含两个demo:一个是只有实时显示摄像头图像的简单版demo,另一个是同时加入了两个按钮控制图像翻转和灰度的demo,供大家学习。
1.利用pyqt5设计程序界面及交互接口; 2.使用OpenCV库函数及相关算法的具体实现完成简易的数字图像处理; 3.内容涉及图像的平移、缩放、任意角度旋转、平滑、锐化、添加噪声、图像分割等基本处理方法。
精品--毕业设计:行人检测系统,pyqt + opencv
毕业设计&课设--毕业设计:行人检测系统,pyqt + opencv
pyqt5-opencv-video pyqt5 + opencv 实现视频播放,支持实时流,支持远程文件
毕业设计,基于Python+PyQt+OpenCV开发的卷积神经网络人脸识别驾驶员疲劳检测与预警系统,内含Python完整源代码 基于Python卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计 开发技术环境: Pycharm + Python3.6...
## 包含的算法: 1. 均值滤波 2. 高斯滤波 3. 中值滤波 4. Sobel边缘检测 5. Laplacian边缘检测 6. Canny边缘检测 ...详细信息参考:https://ximikang.notion.site/pyqt-opencv-375fe7de68614f2fab393f51089f4186
毕业设计,基于pyqt+opencv开发的草原草畜平衡监测图像的分析--植被盖度计算,内含完整源代码,使用说明书 草原草畜平衡监测图像的分析,植被盖度计算
这个基于Python、PyQt、OpenCV和SQLite的人脸识别课堂签到系统可以实现学生在课堂上的自动签到。系统的工作流程大致如下: 学生信息录入: 添加学生的姓名信息,并且可以通过摄像头采集学生的照片。 人脸数据处理: ...
毕业设计,基于pyqt+opencv开发的行人检测系统,可以探测车前的行人,有人走入汽车的行进路线即会发出警告,内含完整源代码 行人检测系统,探测车前的行人,如果有人走入汽车的行进路线即会发出警告 运行环境: ...
该程序使用pyqt5进行界面设计,调用opencv进行目标识别
行人检测系统,探测车前的行人,如果有人走入汽车的行进路线即会发出警告 运行环境: Python3.6(Miniconda3)+OpenCV3,IDE:PyCharm 环境安装: pip install -r requirements.txt
基于pyqt5 + opencv实现的视频播放系统python源码+注释说明+测试视频 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,...
python项目开发实战_AI人脸识别签到打卡系统(PyQt5+百度智能云+OpenCV-Python+SQLite3)_编程案例实例教程