Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QImage to Numpy Array using PySide

I am currently switching from PyQt to PySide.

With PyQt I converted QImage to a Numpy.Array using this code that I found on SO:

def convertQImageToMat(incomingImage):
    '''  Converts a QImage into an opencv MAT format  '''

    incomingImage = incomingImage.convertToFormat(4)

    width = incomingImage.width()
    height = incomingImage.height()

    ptr = incomingImage.bits()
    ptr.setsize(incomingImage.byteCount())
    arr = np.array(ptr).reshape(height, width, 4)  #  Copies the data
    return arr

However ptr.setsize(incomingImage.byteCount()) does not work with PySide as this is part of the void* support of PyQt.

My Question is: How can I convert a QImage to a Numpy.Array using PySide.

EDIT:

Version Info
> Windows 7 (64Bit)
> Python 2.7
> PySide Version 1.2.1
> Qt Version 4.8.5
like image 241
Mailerdaimon Avatar asked Nov 11 '13 08:11

Mailerdaimon


1 Answers

The trick is to use QImage.constBits() as suggested by @Henry Gomersall. The code I use now is:

def QImageToCvMat(self,incomingImage):
    '''  Converts a QImage into an opencv MAT format  '''

    incomingImage = incomingImage.convertToFormat(QtGui.QImage.Format.Format_RGB32)

    width = incomingImage.width()
    height = incomingImage.height()

    ptr = incomingImage.constBits()
    arr = np.array(ptr).reshape(height, width, 4)  #  Copies the data
    return arr
like image 100
Mailerdaimon Avatar answered Sep 23 '22 12:09

Mailerdaimon