隐写术应用:将水印嵌入图片并解析 - Python 实现

隐写术一般被认为是信息隐藏学的一个重要分支,因为它能将特定信息嵌入信息载体且不易被察觉,因此在著作权保护、数据附加等领域有着广泛应用。

本文将以原图 P.jpg 为例,建立生成嵌入文字 '信息深圳杯数学建模挑战赛'(作为隐藏水印)的图片 SP 的数学模型,使得图片 SP.jpg 在人的视觉上尽可能与原图 P 相近。我们将实现生成图片 SP 的算法,并提供 Python 代码示例。

生成图片 SP 的 Python 程序

以下是一个使用隐写术生成图片 SP 的 Python 程序示例:

from PIL import Image

# 加载原图 P.jpg
original_image = Image.open('P.jpg')

# 获取原图的宽高
width, height = original_image.size

# 创建新的图片 SP,使用原图的模式和尺寸
stego_image = Image.new(original_image.mode, (width, height))

# 嵌入的文字信息
hidden_message = '信息深圳杯数学建模挑战赛'

# 将文字信息转换为二进制形式
binary_message = ''.join(format(ord(char), '08b') for char in hidden_message)

# 遍历原图的每个像素点
for x in range(width):
    for y in range(height):
        # 获取原图的 RGB 值
        r, g, b = original_image.getpixel((x, y))

        # 将 RGB 值的最低位替换为文字信息的二进制位
        r = (r & 0xFE) | int(binary_message[x * height + y])

        # 创建新的像素点,并将修改后的 RGB 值赋值给新像素点
stego_image.putpixel((x, y), (r, g, b))

# 保存生成的图片 SP.jpg
stego_image.save('SP.jpg')

# 解析图片 SP 中的隐藏信息
hidden_message = ''
for x in range(width):
    for y in range(height):
        # 获取图片 SP 的 RGB 值
        r, _, _ = stego_image.getpixel((x, y))

        # 提取 RGB 值的最低位作为隐藏信息的二进制位
hidden_message += str(r & 1)

# 将隐藏信息转换为文字形式
hidden_message = ''.join(chr(int(hidden_message[i:i+8], 2)) for i in range(0, len(hidden_message), 8))

# 打印解析出的隐藏信息
print(hidden_message)

请确保已安装 Pillow 库(用于图像处理),并将原图 P.jpg 放在同一目录下。运行上述代码后,将生成图片 SP.jpg,并解析出隐藏的信息。

代码解释

  1. 加载原图和创建新图片: 使用 Image.open() 加载原图 P.jpg,并使用 Image.new() 创建一个与原图尺寸和模式相同的新图片 SP。
  2. 将文字信息转换为二进制: 使用 format(ord(char), '08b') 将每个字符转换为 8 位二进制表示,并使用 ''.join(...) 将所有二进制字符串拼接成一个完整的二进制字符串。
  3. 嵌入信息: 遍历原图的每个像素点,获取其 RGB 值。然后,将 RGB 值的最低位(即最后一位)替换为文字信息二进制字符串中的对应位,并将修改后的 RGB 值赋值给新图片 SP 的对应像素点。
  4. 解析信息: 遍历图片 SP 的每个像素点,提取每个像素点的 RGB 值的最低位作为隐藏信息的二进制位。然后,将所有二进制位拼接成一个完整的二进制字符串,并使用 chr(int(..., 2)) 将二进制字符串转换为文字信息。

注意

  • 这种简单的隐写术容易被识别,可以通过更复杂的算法提高隐写效果。
  • 嵌入信息的大小受图片尺寸限制,如果信息量过大,可能会导致图片质量下降。
  • 隐写术仅用于信息隐藏,不应用于非法活动。
隐写术应用:将水印嵌入图片并解析 - Python 实现

原文地址: https://www.cveoy.top/t/topic/fS9g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录