实验要求:
数据载体: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")
最后,日常署名(作者:余心远)