所以我有一个512x512灰度图像,我想使用图像像素的每一位来制作8个不同的黑白图像,每个图像都有各自的位。为此,我使用了opencv库。
灰度图像x_img_g
由矩阵表示:
[[162 162 162 ... 170 155 128]
[162 162 162 ... 170 155 128]
[162 162 162 ... 170 155 128]
...
[ 43 43 50 ... 104 100 98]
[ 44 44 55 ... 104 105 108]
[ 44 44 55 ... 104 105 108]]
我认为我设法用这样的方式制作出了最高位的图像:
def makeImages():
y = x_img_g>128
cv2.imshow('BW',np.uint8(y*255))
cv2.waitKey(0)
cv2.destroyAllWindows()
但是我在制作其他图像时遇到了麻烦,所以我真的很感激任何帮助。
哦,如果有人也可以解释这一点,我也想制作一张仅包含x_img_g
的4个最高有效位的图像
答案 0 :(得分:1)
扩展到3D
,并在其末尾添加新轴,并沿同一方向使用np.unpackbits
-
np.unpackbits(a[...,None], axis=-1) # a is input array
样品运行-
In [145]: np.random.seed(0)
In [146]: a = np.random.randint(0,256,(2,3),dtype=np.uint8)
In [147]: a
Out[147]:
array([[172, 10, 127],
[140, 47, 170]], dtype=uint8)
In [149]: out = np.unpackbits(a[...,None], axis=-1)
In [150]: out
Out[150]:
array([[[1, 0, 1, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1]],
[[1, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 1, 0, 1, 1, 1, 1],
[1, 0, 1, 0, 1, 0, 1, 0]]], dtype=uint8)
因此,out[...,0]
将是具有最低有效位的二进制图像,依此类推,直到out[...,7]
是具有最高有效位的二进制图像。
或者,换句话说,我们可以沿第一个轴使用新轴延伸-
out = np.unpackbits(a[None], axis=0)
因此,out[0]
将是具有最低有效位的二进制图像,依此类推,直到out[7]
是具有最高有效位的二进制图像。