Python+QTimer計(jì)時(shí)器實(shí)現(xiàn)攝像頭視頻的播放和暫停
在上一篇文章《Python學(xué)習(xí)之簡(jiǎn)易視頻播放器》中,通過(guò)python-opencv-pyqt5,實(shí)現(xiàn)了有界面的視頻播放。但是,上文代碼只有播放,卻無(wú)法讓播放的視頻暫停。這是因?yàn)椋覀冊(cè)诓シ胖惺褂玫氖莣hile(self.cap.isOpened())循環(huán)。若要讓視頻在播放過(guò)程可以暫停,就要借助QTimer()函數(shù)來(lái)實(shí)現(xiàn)了。不多說(shuō)了,直接上代碼:
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('攝像頭是否開(kāi)啟: {}'.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個(gè)控件,分別是播放和暫停按鈕,以及用于加載視頻的QLabel,然后通過(guò)QVBoxLayout和QHBoxLayout進(jìn)行了簡(jiǎn)單布局。程序執(zhí)行后,會(huì)先去打開(kāi)本地?cái)z像頭,然后點(diǎn)擊播放按鈕后,才會(huì)讀取視頻流數(shù)據(jù)。點(diǎn)擊暫停按鈕,則會(huì)通過(guò)暫停計(jì)時(shí)器,從而實(shí)現(xiàn)視頻播放的暫停。具體效果圖如下:

好了,現(xiàn)在可以把上面的代碼和《Python學(xué)習(xí)之簡(jiǎn)易視頻播放器》的代碼結(jié)合一下,讓播放器的功能進(jìn)一步完善吧!
到此這篇關(guān)于Python+QTimer計(jì)時(shí)器實(shí)現(xiàn)攝像頭視頻的播放和暫停的文章就介紹到這了,更多相關(guān)Python視頻播放和暫停內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用Python的繪圖庫(kù)(matplotlib)繪制小波能量譜
這篇文章主要介紹了用Python的繪圖庫(kù)(matplotlib)繪制小波能量譜,代碼簡(jiǎn)單詳細(xì),思路清晰,需要的朋友可以參考下2021-04-04
PyQt5實(shí)現(xiàn)QLineEdit正則表達(dá)式輸入驗(yàn)證器
這篇文章主要介紹了PyQt5實(shí)現(xiàn)QLineEdit正則表達(dá)式輸入驗(yàn)證器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(三)
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)第三篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
python矩陣基本運(yùn)算的實(shí)現(xiàn)
本文主要介紹了python?矩陣的基本運(yùn)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
python網(wǎng)絡(luò)爬蟲之協(xié)程的實(shí)現(xiàn)方法
這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲之協(xié)程的實(shí)現(xiàn)方法,協(xié)程Coroutine又稱微線程,是一種用戶態(tài)內(nèi)的上下文切換技術(shù),簡(jiǎn)而言之,就是通過(guò)一個(gè)線程實(shí)現(xiàn)代碼塊相互切換執(zhí)行,需要的朋友可以參考下2023-08-08
Python使用multiprocessing實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的分布式作業(yè)調(diào)度系統(tǒng)
mutilprocess像線程一樣管理進(jìn)程,這個(gè)是mutilprocess的核心,他與threading很是相像,對(duì)多核CPU的利用率會(huì)比threading好的多,通過(guò)本文給大家介紹Python使用multiprocessing實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的分布式作業(yè)調(diào)度系統(tǒng),需要的朋友參考下2016-03-03
pandas按若干個(gè)列的組合條件篩選數(shù)據(jù)的方法
下面小編就為大家分享一篇pandas按若干個(gè)列的組合條件篩選數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
在SAE上部署Python的Django框架的一些問(wèn)題匯總
這篇文章主要介紹了在SAE上部署Python的Django框架的一些問(wèn)題匯總,SAE是新浪的一個(gè)在線APP部署平臺(tái),并且對(duì)Python應(yīng)用提供相關(guān)支持,需要的朋友可以參考下2015-05-05

