Python конвертировать IplImage в Qimage - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь обработать некоторые видео с помощью openCV, а затем поместить его в pyqt Qimage ...

Я видел несколько примеров, чтобы сделать это, но все они на C ++, и я могу понять только Python,

Может кто-нибудь помочь мне, пожалуйста ... спасибо

Ответы [ 4 ]

2 голосов
/ 12 сентября 2011

Вы можете использовать следующий код для преобразования числовых массивов в QImage:

from PyQt4.QtGui import QImage, qRgb
import numpy as np

class NotImplementedException:
    pass

gray_color_table = [qRgb(i, i, i) for i in range(256)]

def toQImage(im, copy=False):
    if im is None:
        return QImage()

    if im.dtype == np.uint8:
        if len(im.shape) == 2:
            qim = QImage(im.data, im.shape[1], im.shape[0], im.strides[0], QImage.Format_Indexed8)
            qim.setColorTable(gray_color_table)
            return qim.copy() if copy else qim

        elif len(im.shape) == 3:
            if im.shape[2] == 3:
                qim = QImage(im.data, im.shape[1], im.shape[0], im.strides[0], QImage.Format_RGB888);
                return qim.copy() if copy else qim
            elif im.shape[2] == 4:
                qim = QImage(im.data, im.shape[1], im.shape[0], im.strides[0], QImage.Format_ARGB32);
                return qim.copy() if copy else qim

    raise NotImplementedException

, а затем просто преобразуйте CvMat в OpenCV в пустой массив перед вызовом toQImage()

arr = numpy.asarray(mat)
qim = toQImage(arr)

См. Также http://opencv.willowgarage.com/documentation/python/cookbook.html для преобразования между CvMat OpenCV и массивом numpy.

1 голос
/ 07 апреля 2012

Это сработало для меня.

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)
0 голосов
/ 12 января 2017

Эта функция работала для меня, используя QT5, используя JPEG с локального диска

from PyQt5.QtGui import QImage

def convertMatToQImage(cvImg):
    return QImage(cvImg.data, cvImg.shape[1], cvImg.shape[0], QImage.Format_RGB32)
0 голосов
/ 30 апреля 2013

Я хотел задать тот же вопрос из cvMat для разговора QImage, и я не нашел ни одного примера для python.

Я решил это так:

pano = cv.CreateMat(int(height),int(width),0)
cv.Zero(pano)
cv.Resize(self.image,pano)
self._data=pano.tostring('raw') 
image2=QImage(self._data,pano.width,pano.height,QtGui.QImage.Format_Indexed8)

self.imageLabel.setPixmap(QPixmap(image2))
...