2013-11-11 4 views
6

В настоящее время я перехожу из PyQt в PySide.QImage to Numpy Array с использованием PySide

С PyQt я преобразовал QImage в Numpy.Array, используя этот код, который я нашел на 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 

Однако ptr.setsize(incomingImage.byteCount()) не работает с PySide, поскольку это является частью void* support из PyQt.

Мой вопрос: Как преобразовать QImage в Numpy.Array с помощью PySide.

EDIT:

Version Info 
> Windows 7 (64Bit) 
> Python 2.7 
> PySide Version 1.2.1 
> Qt Version 4.8.5 
+1

PySide, похоже, не предлагает метод 'bits'. Это тоже часть PyQt? Как насчет использования ['constBits'] (http://srinikom.github.io/pyside-docs/PySide/QtGui/QImage.html#PySide.QtGui.PySide.QtGui.QImage.constBits)? –

+0

м (не верю, что я этого не видел! Большое спасибо.Если вы отправите свой комментарий в качестве ответа, я его приму. Спасибо еще раз! – Mailerdaimon

+0

Выполнено, но это так, чтобы ответить на вопрос? –

ответ

2

PySide, кажется, не предлагают метод bits. Как насчет использования constBits, чтобы получить указатель на массив?

1

Хитрость заключается в использовании QImage.constBits(), как предложено @Henry Gomersall. Код, который я использую сейчас:

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 
+0

Замечательно! Знаете ли вы его обратно? – Maham

+0

@Maham. Лучше спросить по отдельному вопросу – Mailerdaimon

+0

не работает с pyqt5.9 – Silencer