저는 PyQt4 GUI와 OpenCV를 사용하여 비디오를 캡쳐하려고했습니다. 캡처를 제어하기 위해 "시작", "종료"등과 같은 버튼을 만들었습니다. 시작은 괜찮지 만 캡처를 멈출 수는 없습니다. 캡처를 중지하려면 while 루프를 깨뜨릴 필요가 있습니다. startCapture() 기능을 수행 할 수 없습니다.OpenCV Video Capture with PyQt4
현재, endCapture는() 창을 파괴하지만, startCapture루프이 간단하게 작성하고 촬영을 계속하면서. 해당 옵션을 끊는 것만 선택할 수 있습니다.
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