Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PIL(LSB)的Python图像处理_Python_Image_Python Imaging Library_Steganography - Fatal编程技术网

使用PIL(LSB)的Python图像处理

使用PIL(LSB)的Python图像处理,python,image,python-imaging-library,steganography,Python,Image,Python Imaging Library,Steganography,我最近开始学习隐写术,我遇到了一个我似乎不明白的问题。基本上,图像是一个包含隐藏标志的png 当您从图像中提取位平面时,您可以看到在蓝色和绿色平面中有一个图像,在红色平面中可以看到。要以明文显示标志,您必须通过XORing LSB或其他方式从红色图像中删除这些图像。我不能完全肯定 如果不删除其他图像,则红色平面中的图像就是这个样子 我的问题是我该怎么做这种事情?这就是问题中的图像 实际上,隐藏图像位于最低的3位平面中。进行一次完整的分解可以清楚地说明这一点 首先,将图像加载到一个numpy数

我最近开始学习隐写术,我遇到了一个我似乎不明白的问题。基本上,图像是一个包含隐藏标志的png

当您从图像中提取位平面时,您可以看到在蓝色和绿色平面中有一个图像,在红色平面中可以看到。要以明文显示标志,您必须通过XORing LSB或其他方式从红色图像中删除这些图像。我不能完全肯定

如果不删除其他图像,则红色平面中的图像就是这个样子

我的问题是我该怎么做这种事情?这就是问题中的图像


实际上,隐藏图像位于最低的3位平面中。进行一次完整的分解可以清楚地说明这一点

首先,将图像加载到一个numpy数组,该数组的维数为MxNx3

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

img = Image.open('stego.png')
data = np.array(img)
您现在所要做的就是将每个颜色平面与另一个颜色平面异或,然后保留3个最低有效位(lsb)

如果不明显,则
&0x07
部分是一个AND操作,其二进制数为00000111,为了简洁起见,仅用十六进制编写


如果你没有保留所有3个lsb,那么你要么会在解决方案中丢失一些字母,要么所有的东西都会在那里,但一些边缘不会那么平滑。第一个非常重要。

也许会给你一个合适的起点。问题是,我不知道如何从图像的三个最低有效位中删除图像。我只想要红色的平面,没有其他的图像,但是我需要通过对LSB进行XORing来删除它们。我想这显示了如何使用numpyI对单个像素执行操作,就像你的解决方案一样,即使没有其他人会费心去对它进行投票:-)这比我想象的简单多了。谢谢你的清晰而简单的回答!
extracted = (data[...,0] ^ data[...,1] ^ data[...,2]) & 0x07
plt.imshow(extracted)
plt.show()