为numpy.array()创建一个“array_like”QImage子类

时间:2013-01-26 06:16:38

标签: numpy pyside qimage

我想创建一个可以传递给array_like 的“QImagenumpy.array()子类。 我想避免使用PIL作为替代品;这一点的全部意义是避免依赖PIL。此外,不断在QImagePIL Image之间进行转换对我的计划来说是不切实际的。

我发现documentation神秘,在阅读之后我仍然对如何模拟阵列界面感到困惑。正如numpy文档所述,要获得“array_like”对象的资格,它需要__array_interface__属性,这是一个包含五个键的字典。但是,我以前从未处理过类型,缓冲区和内存;如果有人能解释如何解决这个问题,我将不胜感激。

我正在使用Python 3.3和PySide 1.1.2。 感谢所有回复的人!

1 个答案:

答案 0 :(得分:3)

使用从QImage.bits()np.frombuffer()返回的缓冲区对象更容易。

def qimage2array(q_image):
    width = q_image.width()
    height = q_image.height()
    arr = np.frombuffer(q_image.bits(), dtype=np.uint8).reshape([height, width, -1])
    return arr