PyQt afficher de la vidéo en flux à partir d'opencv
Essayer de lien PyQt et Opencv flux vidéo, ne peut pas comprendre comment appliquer lors de la boucle en continu des vidéos en streaming. Il suffit de prendre une photo.Svp quelqu'un peut-il aider à résoudre le problème.
-
PtQt=5
-
Python=3.6.1
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'PyQt5 Video'
self.left = 100
self.top = 100
self.width = 640
self.height = 480
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.resize(1800, 1200)
#create a label
label = QLabel(self)
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0],
QtGui.QImage.Format_RGB888)
convertToQtFormat = QtGui.QPixmap.fromImage(convertToQtFormat)
pixmap = QPixmap(convertToQtFormat)
resizeImage = pixmap.scaled(640, 480, QtCore.Qt.KeepAspectRatio)
QApplication.processEvents()
label.setPixmap(resizeImage)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
Vous devez vous connecter pour publier un commentaire.
Le problème est que la fonction qui obtient l'image est exécutée qu'une seule fois et de ne pas mettre à jour l'étiquette.
La manière correcte est de le placer à l'intérieur d'une boucle, mais cela va dans le blocage de la fenêtre principale. Ce blocage de la fenêtre principale peut être résolu en utilisant la
QThread
de la classe et de l'envoyer par le biais d'un signalQImage
de mettre à jour l'étiquette. Par exemple:Merci Taimur l'Islam pour la question.
Merci eyllanesc pour la merveilleuse réponse et j'ai modifié votre code peu. J'ai utilisé PtQt=4 Python=2.7 et je n'ai pas utiliser opencv