给定一个3d numpy数组,我想提取数字的2个最低有效位:
例如,让
img = [[[30, 31, 32],
[33, 34, 35],
[36, 37, 38],
[39, 40, 41],
[42, 43, 44]],
[[45, 46, 47],
[48, 49, 50],
[51, 52, 53],
[54, 55, 56],
[57, 58, 59]]]
其中每个像素[30,31,32]或[33,34,35] ......等等分别代表R,G,B值
我想提取2个最低有效位并连接这些数字以创建一个6位数字。
对于([30,31,32]),2 LSB分别为10,11和00。 然后将它连接在一起以产生101100,其为44的十进制数。目标是为给定数组中的每个“像素”制作一个数字列表。
我想对使用numpy操作和没有for循环给出的数组中的每个“像素”执行此操作。
答案 0 :(得分:2)
该位屏蔽掉低两位,然后将每个三位移位,然后对它们求和:
img = [[[30, 31, 32],
[33, 34, 35],
[36, 37, 38],
[39, 40, 41],
[42, 43, 44]],
[[45, 46, 47],
[48, 49, 50],
[51, 52, 53],
[54, 55, 56],
[57, 58, 59]]]
import numpy as np
print ((np.array(img) & 0b11) << np.array([4,2,0])).sum(axis=2)
打印哪些:
[[44 27 6 49 44]
[27 6 49 44 27]]
我确信它可以做得更好但是这确实得到了所要求的结果。