背景
从一个计算机爱好者的视频中,我有了玩最低有效位隐写术的想法。现在,我正在尝试使用 Numpy 以图像的位格式提取和连接所有 RGB 值。最终,我只需要数组的第 7 位和第 8 位。
设置
我用Pillow以下方式加载图像并提取位:
from PIL import Image
import numpy as np
img = Image.open('test.png')
arr = np.array(img)
bits = np.unpackbits(arr, axis=2)
问题
bits对于 1600x1200 像素的图像,该阵列现在具有例如 (1600, 1200, 24) 的形状。我现在需要的是
为每个像素提取 24 位
将所有 24 位块连接成一个一维数组。
仅提取第 7、8、15、16、23 和 24 位,因此仅提取每个颜色分量的最后 2 位。
到目前为止的方法
我试图分裂沿着第二轴的3D阵列分为3组。然后我可以遍历 1200 个列表,每个列表包含 3 个列表并提取最后 2 位,如下所示:
sp = np.split(bits, 3, axis=2)
for i in range(0, 1200):
for j in range(0, 3):
print(sp[j][0][i][-2:])
题
虽然我的上述方法有效,但我觉得必须有一个更高效的解决方案,只使用Numpy Magic®. 你知道更好的方法吗?
慕勒3428872
相关分类