我一直在嘗試使用PyQt4 GUI和OpenCV捕獲視頻。我創建了一些按鈕,如「開始」,「結束」等來控制捕捉。開始很好,但我無法停止捕獲。要停止捕獲,我需要打破startCapture()函數下面的while循環,我無法實現它。使用PyQt4進行OpenCV視頻捕獲
目前,endCapture()破壞了窗口,但startCapturewhile循環簡單地創建它,繼續捕捉。唯一的選擇是打破這個循環。
下面是我使用的代碼:
import cv2
import numpy as np
from PyQt4 import QtGui, QtCore
def startCapture(cap):
print "pressed start"
while(True):
ret, frame = cap.read()
cv2.imshow("Capture", frame)
cv2.waitKey(5)
cv2.destroyAllWindows()
def endCapture(cap):
print "pressed End"
cv2.destroyAllWindows()
def quitCapture(cap):
print "pressed Quit"
cv2.destroyAllWindows()
cap.release()
QtCore.QCoreApplication.quit()
class Window(QtGui.QWidget):
def __init__(self):
c = cv2.VideoCapture(0)
QtGui.QWidget.__init__(self)
self.setWindowTitle('Control Panel')
self.start_button = QtGui.QPushButton('Start',self)
self.start_button.clicked.connect(lambda : startCapture(c, True))
self.end_button = QtGui.QPushButton('End',self)
self.end_button.clicked.connect(lambda : endCapture(c))
self.quit_button = QtGui.QPushButton('Quit',self)
self.quit_button.clicked.connect(lambda : quit(c))
vbox = QtGui.QVBoxLayout(self)
vbox.addWidget(self.start_button)
vbox.addWidget(self.end_button)
vbox.addWidget(self.quit_button)
self.setLayout(vbox)
self.setGeometry(100,100,200,200)
self.show()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())
任何一個可以建議如何打破這一循環,並退出捕捉?
創建一些在startCapture循環中檢查的類或全局變量。並在endCapture被調用時更改 – M4rtini
@Abid,是否有效?我有同樣的問題。你是如何解決這個問題的? – haccks