1

openCV を使用していくつかのビデオを処理し、それを pyqt Qimage 内に配置しようとしています...

そのための例をいくつか見ましたが、それらはすべて C++ で書かれており、Python しか理解できません。

誰か助けてください...ありがとう

4

4 に答える 4

2

次のコードを使用して、numpy配列を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

次に、OpenCVのCvMatをnumpy配列に変換してから呼び出しますtoQImage()

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

OpenCVのCvMat配列とnumpy配列の間の変換については、http://opencv.willowgarage.com/documentation/python/cookbook.htmlも参照してください。

于 2011-09-12T13:34:34.303 に答える
1

これは私にとってはうまくいきました。

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)
于 2012-04-07T09:22:16.753 に答える