python 将 IplImage 转换为 Qimage

发布于 2024-11-19 21:03:40 字数 122 浏览 2 评论 0原文

我正在尝试使用 openCV 处理一些视频,然后将其放入 pyqt Qimage 中...

我看到了一些示例,但它们都是用 C++ 编写的,我只能理解 python,

任何人都可以帮助我吗...谢谢

I am trying to process some videos using openCV and then put it inside pyqt Qimage...

I saw some examples to do that but they are all in C++ and I can understand python only,

Can anyone help me please ... thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

罪歌 2024-11-26 21:03:41

您可以使用以下代码将 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

然后在调用 toQImage() 之前将 OpenCV 的 CvMat 转换为 numpy 数组。

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

另请参阅 http://opencv.willowgarage.com/documentation/python/cookbook.html 用于之间的转换OpenCV 的 CvMat 和 numpy 数组。

You can use the following code to convert numpy arrays to 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

and then just convert OpenCV's CvMat to a numpy array before calling toQImage()

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

See also http://opencv.willowgarage.com/documentation/python/cookbook.html for the conversion between OpenCV's CvMat and numpy arrays.

倾城月光淡如水﹏ 2024-11-26 21:03:41

这对我有用。

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)

This worked for me.

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)
诗笺 2024-11-26 21:03:41

我想从 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))

I wanted to ask the same question from cvMat to QImage conversation and I didn't find any example for python.

I solved it like this:

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))
╭⌒浅淡时光〆 2024-11-26 21:03:41

这个功能对我使用 QT5 有用,使用本地磁盘中的 JPEG

from PyQt5.QtGui import QImage

def convertMatToQImage(cvImg):
    return QImage(cvImg.data, cvImg.shape[1], cvImg.shape[0], QImage.Format_RGB32)

This function worked for me using QT5, using a JPEG from local disk

from PyQt5.QtGui import QImage

def convertMatToQImage(cvImg):
    return QImage(cvImg.data, cvImg.shape[1], cvImg.shape[0], QImage.Format_RGB32)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文