在QLabel中显示相机流

时间:2013-11-30 11:48:01

标签: python multithreading opencv webcam pyside

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

一开始我尝试了一个简单的“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还是什么?什么是线程中的信号/插槽?

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

1 个答案:

答案 0 :(得分:0)

我自己无法测试,但仅仅处理循环中的待处理事件是不够的?

那是:

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