栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用PyQT逐帧加载opencv视频

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用PyQT逐帧加载opencv视频

这是上述问题的解决方案:

import sysimport scipy.io as siofrom PyQt4 import QtGui, QtCoreimport cv2class VideoCapture(QtGui.QWidget):    def __init__(self, filename, parent):        super(QtGui.QWidget, self).__init__()        self.cap = cv2.VideoCapture(str(filename))        self.video_frame = QtGui.QLabel()        parent.layout.addWidget(self.video_frame)    def nextframeSlot(self):        ret, frame = self.cap.read()        frame = cv2.cvtColor(frame, cv2.cv.CV_BGR2RGB)        img = QtGui.QImage(frame, frame.shape[1], frame.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(QtGui.QWidget):    def __init__(self,parent):        super(VideoDisplayWidget, self).__init__(parent)    self.layout = QtGui.QFormLayout(self)        self.startButton = QtGui.QPushButton('Start', parent)        self.startButton.clicked.connect(parent.startCapture)        self.startButton.setFixedWidth(50)        self.pauseButton = QtGui.QPushButton('Pause', parent)        self.pauseButton.setFixedWidth(50)        self.layout.addRow(self.startButton, self.pauseButton)        self.setLayout(self.layout)class ControlWindow(QtGui.QMainWindow):    def __init__(self):        super(ControlWindow, self).__init__()        self.setGeometry(50, 50, 800, 600)        self.setWindowTitle("PyTrack")        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 = False        self.isPositionFileLoaded = False        self.quitAction = QtGui.QAction("&Exit", self)        self.quitAction.setShortcut("Ctrl+Q")        self.quitAction.setStatusTip('Close The App')        self.quitAction.triggered.connect(self.closeApplication)        self.openMatFile = QtGui.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 = QtGui.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: passif __name__ == '__main__':    import sys    app = QtGui.QApplication(sys.argv)    window = ControlWindow()    window.show()    sys.exit(app.exec_())


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号