Search code examples
pythonopencvwebcampyqt4phonon

Display a webcam stream in PyQt4 using OpenCV Camera Capture


I am using this Python script to display my webcam:

from opencv.cv import *  
from opencv.highgui import *  

import sys

cvNamedWindow("w1", CV_WINDOW_AUTOSIZE)
camera_index = 0
capture = cvCreateCameraCapture(camera_index)

def repeat():
    global capture #declare as globals since we are assigning to them now
    global camera_index
    frame = cvQueryFrame(capture)
    cvShowImage("w1", frame)
    c = cvWaitKey(10)

    if c == "q":
        sys.exit(0)

if __name__ == "__main__":
    while True:
        repeat()

It is working quite well, but I would like to set this display inside my Qt application. How can I use the IplImage OpenCV image into a Qt VideoWidget?


Solution

  • I used the code bellow to covert a Iplimage objet to a QImage. It took me some time to get the right formats. Iplimage is a 3-channel format with BGR channel order while QImage uses RGB channel order.

    camcapture = cv.CaptureFromCAM(0)       
    cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
    cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720);
    
    frame = cv.QueryFrame(camcapture)
    image = QImage(frame.tostring(), frame.width, frame.height, QImage.Format_RGB888).rgbSwapped()
    pixmap = QPixmap.fromImage(image)