我想使用python OpenCV绑定(bind)在QLabel中显示网络摄像头流。我在这里找到了一些以前的帖子:

  • updating QLabel in non-GUI thread continuously
  • Displaying a video stream in QLabel with PySide

  • 一开始,我尝试了一个简单的“while”循环:
    def onRun(self):
        self.playing = True
        capture = cv2.VideoCapture(0)
        while self.playing:
            _, data = capture.read()
            data = cv2.cvtColor(data, cv2.cv.CV_BGR2RGB)
            qImage = QtGui.QImage(data, data.shape[1], data.shape[0],
                QtGui.QImage.Format_RGB888)
            self.lblImage.setPixmap(QtGui.QPixmap.fromImage(qImage))
            self.lblImage.adjustSize()
            time.sleep(0.02)
    

    但是我遇到了一个“白窗”问题。我发现解决此问题的正确方法是创建一个新线程。我的问题是:关于新线程的全部内容是什么?我应该创建QThread之类的东西吗?线程中发出的信号/插槽是什么?

    我从未使用过线程,所以对我来说这是全新的东西。

    最佳答案

    我自己无法测试,但是仅在循环中处理未决事件还不够吗?

    那是:

    def onRun(self):
        self.playing = True
        capture = cv2.VideoCapture(0)
        while self.playing:
            ...
            QtGui.qApp.processEvents()
            time.sleep(0.02)
    

    关于python - 在QLabel中显示摄像机流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20299838/

    10-15 12:51