我正在尝试从 numpy 数组创建 QPixmap 。 numpy 数组图像将是二维的(即没有颜色信息,只有灰度)。
我正在尝试适应这一点answer https://stackoverflow.com/a/9796921/1764089满足我的需要,但我不太明白这一行:
b = (255 << 24 | a[:,:,0] << 16 | a[:,:,1] << 8 | a[:,:,2]).flatten() # pack RGB values
正在进行一些位移和一些按位or
'但说实话我不太明白。
所以我的简化示例如下:
x, y = np.meshgrid(np.arange(1920), np.arange(1080), indexing='ij'); z = np.sin(0.03*x)*np.cos(0.005*y)
imgPNFN = z
if imgPNFN.ndim == 2:
imgPNFN = imgPNFN[:,:,np.newaxis].repeat(3, 2)
imMin = np.min(imgPNFN)
imDelta = np.max(imgPNFN) - np.min(imgPNFN)
im1 = ((imgPNFN-imMin)/imDelta*255).astype(np.uint32)+1 #<-- had to add 1 for some reason otherwise got weird results...
im2 = 255 << 24 | im1[:,:,0] << 16 | im1[:,:,1] << 8 | im1[:,:,2]
im3 = QtGui.QImage(im2, im2.shape[1], im2.shape[0], QtGui.QImage.Format_RGB32)
这似乎有效,但是当我的图像是 lena 时,即:
from scipy.misc import lena
l = sp.misc.lena()
imgPNFN = l
#etc...
它不起作用...我认为这是因为我对位移正在做什么缺乏理解...另外,如果有更好的方法来处理RGB(即我复制东西来假装我有相同的值)如果我能以某种方式避免这种情况那就太好了。
提前致谢!