[英]QImage to Numpy Array using PySide
我目前正在从PyQt切换到PySide。
使用PyQt我使用在SO上找到的代码将QImage
转换为Numpy.Array
:
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一起使用,因为这是PyQt的void*
支持的一部分。
我的问题是:我怎么可以转换到QImage的一个Numpy.Array
使用PySide。
编辑:
Version Info
> Windows 7 (64Bit)
> Python 2.7
> PySide Version 1.2.1
> Qt Version 4.8.5
诀窍是使用@Henry Gomersall建议的QImage.constBits QImage.constBits()
。 我现在使用的代码是:
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
PySide似乎没有提供bits
方法。 如何使用constBits获取指向数组的指针?
对我来说, constBits()
的解决方案不起作用,但以下工作:
def QImageToCvMat(incomingImage):
''' Converts a QImage into an opencv MAT format '''
incomingImage = incomingImage.convertToFormat(QtGui.QImage.Format.Format_RGBA8888)
width = incomingImage.width()
height = incomingImage.height()
ptr = incomingImage.bits()
ptr.setsize(height * width * 4)
arr = np.frombuffer(ptr, np.uint8).reshape((height, width, 4))
return arr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.