numpy 数组在一维中重新排序值
numpy array reorder values in single dimension
我还是 numpy
的新手,并且在编写 lambda 来执行本例中我想要的操作时遇到了问题。可能是因为数组中的数据导致 lambda 不起作用?
我使用 Python 中的 PyQT
从 Qt5 中的 QImage
获得了一些像素值:
ptr = self.myPhoto.bits()
ptr.setsize(self.myPhoto.byteCount())
pixels = np.asarray(ptr).reshape(self.myPhoto.height(), self.myPhoto.width(), 4)
像素数据如下所示[[[B G R 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]]]
我希望它看起来像这样 [[[R G B A]]]:
[[[ 2 0 100 255]
[ 2 0 100 255]
[ 1 1 100 255]
...,
[ 0 3 2 255]
[ 0 2 1 255]
[ 0 2 1 255]]]
编辑:从数组中删除了逗号
此外,是否可以直接从 reshape 调用而不是使用 lambda post 进程来执行此操作?
这些问题很有趣,但我仍然无法将它们粘合在一起以获得我想要的结果:
- 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
这个解决方案怎么样?您可以在通过此
发送之前使用 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)
我还是 numpy
的新手,并且在编写 lambda 来执行本例中我想要的操作时遇到了问题。可能是因为数组中的数据导致 lambda 不起作用?
我使用 Python 中的 PyQT
从 Qt5 中的 QImage
获得了一些像素值:
ptr = self.myPhoto.bits()
ptr.setsize(self.myPhoto.byteCount())
pixels = np.asarray(ptr).reshape(self.myPhoto.height(), self.myPhoto.width(), 4)
像素数据如下所示[[[B G R 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]]]
我希望它看起来像这样 [[[R G B A]]]:
[[[ 2 0 100 255]
[ 2 0 100 255]
[ 1 1 100 255]
...,
[ 0 3 2 255]
[ 0 2 1 255]
[ 0 2 1 255]]]
编辑:从数组中删除了逗号
此外,是否可以直接从 reshape 调用而不是使用 lambda post 进程来执行此操作?
这些问题很有趣,但我仍然无法将它们粘合在一起以获得我想要的结果:
- 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
这个解决方案怎么样?您可以在通过此
发送之前使用 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)