PyQT,从numpy数组加载数据时出错
我在尝试从一个numpy数组设置一个pixmap时,遇到了访问违规的错误。
0xC0000005: Access violation reading location 0x0ca00020
使用numpy数组是必须的……不过我觉得这不会造成问题。
这是代码,错误出现在setPixmap操作上。
from scipy import misc
numpy_image_uint8 = misc.imread('test.jpeg')
#info_image=images[0]
#numpy_image_uint8=info_image.frames[0]
numpy_image_uint32 = numpy_image_uint8.astype(np.uint32).copy()
img = (255 << 24 | numpy_image_uint32[:,:,0] << 16 | numpy_image_uint32[:,:,1] << 8 | numpy_image_uint32[:,:,2]).flatten() # pack RGB values
imgQ = QImage(img,640,480,QImage.Format_RGB32)
#imgQ = QImage(QtCore.QString('test.jpeg'))
self.item.setPixmap(QPixmap.fromImage(imgQ))
此外,有两个有趣的点:
如果我使用从文件加载的
QImage
,就可以正常工作,像这样:imgQ = QImage(QtCore.QString('test.jpeg'))
如果我保存
imgQ
变量,保存的图像看起来是正确的:imgQ = QImage(img,640,480,QImage.Format_RGB32) imgQ.save("test_image.bmp")
1 个回答
2
因为 imgQ
和 img
共享内存,所以你需要保持 img
的存在。
试试这个:
self.img = img
imgQ = QImage(self.img,640,480,QImage.Format_RGB32)
你能多说点为什么要这样做吗?