python实现数字水印简单运用(最低有效位算法)

本文介绍了如何使用Python和C++编程语言,配合LSB(最低有效位)水印算法,在512x512的BMP图片中嵌入和提取水印信息。作者提供了详细的步骤和示例代码,包括使用PIL库操作图像数据和VisualStudio/VSCode等工具。
摘要由CSDN通过智能技术生成

实验要求:

        数据载体:512×512大小的bmp图片(image.bmp)

        水印信息:10110101(二进制数)

        水印算法:LSB(最低有效位)

        编程语言:Python/C++

        编程工具:VS/vscode/其他(推荐lightly,无需安装,可在网页运行)

        实验目标:实现向bmp图片中嵌入并提取水印信息

流程:     

        1、以RGB读取载体图片,以数组形式存取;

        2、确定隐藏的水印信息;

        3、隐藏水印。遍历读取图片像素二进制值,对像素值进行最低位清零和最低位替换(将水印信息的每一位替换到像素值的最低位);

        4、将数组重新转换为图像并存储

python代码:

from PIL import Image
import numpy as np
# 打开图像文件
image_path = r"path_to_file.png"#图片地址
image = Image.open(image_path).convert('RGB')
# 将图像转换为数组
data = np.array(image)
# 水印信息
watermark = 'xxxx'#输入需要隐藏的水印信息
# 嵌入水印
for i in range(len(watermark)):
    for j in range(512):
        index = i * 512 + j
        if index < len(data):
            for k in range(3):  
                data[index, k] = (data[index, k] & ~1) | int(watermark[i])
# 将修改后的数组转换回图像
image_watermarked = Image.fromarray(data)
# 保存水印图像
image_watermarked.save('watermarked_image.bmp')
print("OK")

       最后,日常署名(作者:余心远)

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值