Convert numpy array to PySide QPixmap

前端 未结 4 906
借酒劲吻你
借酒劲吻你 2020-12-08 16:59

I want to convert an image into a NumPy array to a PySide QPixmap, so I can display it (EDIT: in my PySide UI). I already found this tool: qimage2ndarray, but it only works

4条回答
  •  余生分开走
    2020-12-08 17:34

    If you create the data yourself, using numpy for example, I think the fastest method is to directly access a QImage. You can create a ndarray from the buffer object QImage.bits(), do some work using the numpy methods and create a QPixmap from QImage when you are done. You can also read or modify existing QImages that way.

    import numpy as np
    from PySide.QtGui import QImage
    
    img = QImage(30, 30, QImage.Format_RGB32)
    imgarr = np.ndarray(shape=(30,30), dtype=np.uint32, buffer=img.bits())
    
    # qt write, numpy read
    img.setPixel(0, 0, 5)
    print "%x" % imgarr[0,0]
    
    # numpy write, qt read
    imgarr[0,1] = 0xff000006
    print "%x" % img.pixel(1,0)
    

    Be sure that the array does not outlive the image object. If you want, you can use a more sophisticated dtype, like a record array for individual access to the alpha, red, green and blue bits (beware of endianess though).

    In case there is no efficient way to calculate the pixel values using numpy, you can also use scipy.weave to inline some C/C++ code that operates on the array img.bits() points to.

    If you already have an image in ARGB format, creating the QImage from data as suggested before is probably easier.

提交回复
热议问题