Python+QTimer計時器實現攝像頭視頻的播放和暫停
在上一篇文章《Python學習之簡易視頻播放器》中,通過python-opencv-pyqt5,實現了有界面的視頻播放。但是,上文代碼只有播放,卻無法讓播放的視頻暫停。這是因為,我們在播放中使用的是while(self.cap.isOpened())循環(huán)。若要讓視頻在播放過程可以暫停,就要借助QTimer()函數來實現了。不多說了,直接上代碼:
import cv2 import sys from PyQt5 import QtWidgets from PyQt5.QtCore import Qt, QTimer from PyQt5.QtGui import QPixmap, QImage from PyQt5.QtWidgets import QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel class UI_FROM(QWidget): def __init__(self): super(UI_FROM, self).__init__() self.resize(800, 600) self.timer_camera = QTimer() self.vl = QVBoxLayout(self) self.hl = QHBoxLayout(self) btn1 = QPushButton('播放') btn1.clicked.connect(self.ShowCamera) self.hl.addWidget(btn1) btn2 = QPushButton('暫停') btn2.clicked.connect(self.timer_camera.stop) self.hl.addWidget(btn2) self.vl.addLayout(self.hl) self.label = QLabel(self) self.label.setGeometry(20, 20, 640, 480) self.label.setStyleSheet("QLabel{background: black;}") self.label.setAlignment(Qt.AlignTop) self.label.setAlignment(Qt.AlignLeft) self.label.setFrameShape(QtWidgets.QFrame.Box) self.label.setScaledContents(True) self.vl.addWidget(self.label) self.cap = cv2.VideoCapture(0) print('攝像頭是否開啟: {}'.format(self.cap.isOpened())) def Stop(self): self.timer_camera.stop() def ShowCamera(self): self.timer_camera.start(100) self.timer_camera.timeout.connect(self.ShowData) def ShowData(self): self.ret, color_frame = self.cap.read() if self.ret : color_frame = cv2.flip(color_frame, 1) cv2.waitKey(1) im = cv2.cvtColor(color_frame, cv2.COLOR_RGB2BGR) img = QImage(im.data, im.shape[1], im.shape[0], QImage.Format_RGB888) self.label.setPixmap(QPixmap.fromImage(img)) else: self.cap.release() self.timer_camera.stop() if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) ui =UI_FROM() ui.show() sys.exit(app.exec_())
如上代碼,界面就放置了3個控件,分別是播放和暫停按鈕,以及用于加載視頻的QLabel,然后通過QVBoxLayout和QHBoxLayout進行了簡單布局。程序執(zhí)行后,會先去打開本地攝像頭,然后點擊播放按鈕后,才會讀取視頻流數據。點擊暫停按鈕,則會通過暫停計時器,從而實現視頻播放的暫停。具體效果圖如下:
好了,現在可以把上面的代碼和《Python學習之簡易視頻播放器》的代碼結合一下,讓播放器的功能進一步完善吧!
到此這篇關于Python+QTimer計時器實現攝像頭視頻的播放和暫停的文章就介紹到這了,更多相關Python視頻播放和暫停內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
用Python的繪圖庫(matplotlib)繪制小波能量譜
這篇文章主要介紹了用Python的繪圖庫(matplotlib)繪制小波能量譜,代碼簡單詳細,思路清晰,需要的朋友可以參考下2021-04-04Python使用multiprocessing實現一個最簡單的分布式作業(yè)調度系統
mutilprocess像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多,通過本文給大家介紹Python使用multiprocessing實現一個最簡單的分布式作業(yè)調度系統,需要的朋友參考下2016-03-03