numpy数组在单个维度中重新排序值

时间:2018-01-24 23:30:22

标签: python numpy pyqt pyqt5 qimage

我仍然是pdfCreator.makeReport(fileName: filename, task: self.task, completion: {success in // any chance to get my progress to update a spinner for example? if success == true { // file is here } } 的新手,并且在编写lambda以便在这种情况下做我想做的事情时遇到了麻烦。由于数组中的数据,lambda可能无法正常工作?

我在Qt5中使用numpy获得了一些像素值,使用了Python中的QImage

PyQT

像素数据看起来像[[[B G R A]]]:

ptr = self.myPhoto.bits()
ptr.setsize(self.myPhoto.byteCount())
pixels = np.asarray(ptr).reshape(self.myPhoto.height(), self.myPhoto.width(), 4)

我希望它看起来像[[[R G B A]]]:

[[[  100   0   2 255]
  [  100   0   2 255]
  [  100   1   1 255]
  ..., 
  [  2   3   0 255]
  [  1   2   0 255]
  [  1   2   0 255]]]

编辑:从数组中移除逗号

此外,是否可以通过重塑调用而不是使用lambda post过程来执行此操作?

这些问题很有意思,但我仍然无法将它们粘在一起以获得我想要的东西:

2 个答案:

答案 0 :(得分:2)

  • PyQt的:

一种可能的解决方案是使用rgbSwapped(),此方法将RGB转换为BGR:

self.myPhoto = self.myPhoto.rgbSwapped()
ptr = self.myPhoto.bits()
ptr.setsize(self.myPhoto.byteCount())
pixels = np.asarray(ptr).reshape(self.myPhoto.height(), self.myPhoto.width(), 4)
  • 使用Numpy:

使用slicing

ptr = self.myPhoto.bits()
ptr.setsize(self.myPhoto.byteCount())
pixels = np.asarray(ptr).reshape(self.myPhoto.height(), self.myPhoto.width(), 4)

r = np.copy(pixels[:,:,0])
pixels[:, :, 0] = pixels[:,:,2]
pixels[:, :, 2] = r

答案 1 :(得分:1)

这个解决方案怎么样?您可以在通过此

发送之前使用tolist()
order = [1,0,2,3]
test = [[[100,0,2,255],
  [100,0,2,255],
  [100,1,1,255]]]

print(test)

for i in range(0,len(test)):
    for j in range(0,len(test[i])):
        temp = test[i][j]
        temp = [temp[k] for k in order]
        test[i][j] = temp

print(test)