基于DCT算法的Python图片隐写术:嵌入与提取隐藏水印

本教程将介绍如何使用Python和离散余弦变换(DCT)算法在图片中嵌入和提取隐藏水印。

1. 嵌入水印

以下Python代码演示了如何将文本水印嵌入到图片中:pythonimport cv2import numpy as np

def embed_watermark(original_image, watermark): # 读取原图像 img = cv2.imread(original_image)

# 将原图像转换为YCbCr颜色空间    ycbcr_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

# 将水印转换为二进制字符串    watermark_binary = ''.join(format(ord(char), '08b') for char in watermark)

# 获取图像的高度和宽度    height, width, _ = ycbcr_img.shape

# 将水印嵌入到图像的Y通道    for i in range(height):        for j in range(width):            # 获取当前像素的Y分量            y = ycbcr_img[i, j, 0]

        # 获取当前像素的二进制表示            y_binary = format(y, '08b')

        # 替换最低有效位为水印的二进制值            modified_y_binary = y_binary[:-1] + watermark_binary[(i * width + j) % len(watermark_binary)]

        # 将修改后的二进制值转换为整数            modified_y = int(modified_y_binary, 2)

        # 更新像素的Y分量            ycbcr_img[i, j, 0] = modified_y

# 将图像转换回BGR颜色空间    modified_img = cv2.cvtColor(ycbcr_img, cv2.COLOR_YCrCb2BGR)

# 返回嵌入水印后的图像    return modified_img

测试代码original_image = 'P.jpg'watermark = 'abc'modified_image = embed_watermark(original_image, watermark)

保存嵌入水印后的图像cv2.imwrite('SP.jpg', modified_image)

代码说明:

  1. 读取原始图像 (P.jpg) 并将其转换为 YCbCr 颜色空间。2. 将水印文本转换为二进制字符串。3. 逐个像素遍历图像的 Y 通道。4. 将每个像素的最低有效位替换为水印的对应位。5. 将修改后的图像转换回 BGR 颜色空间并保存为 SP.jpg

2. 提取水印

以下代码演示了如何从嵌入水印的图像中提取隐藏的文本信息:pythonimport cv2import numpy as np

def extract_watermark(embedded_image): # 读取嵌入水印后的图像 img = cv2.imread(embedded_image)

# 将图像转换为YCbCr颜色空间    ycbcr_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

# 获取图像的高度和宽度    height, width, _ = ycbcr_img.shape

# 提取嵌入的水印    watermark_binary = ''    for i in range(height):        for j in range(width):            # 获取当前像素的Y分量            y = ycbcr_img[i, j, 0]

        # 获取当前像素的二进制表示            y_binary = format(y, '08b')

        # 提取最低有效位作为水印的二进制值            watermark_binary += y_binary[-1]

# 将水印的二进制值转换为字符    watermark = ''.join(chr(int(watermark_binary[i:i+8], 2)) for i in range(0, len(watermark_binary), 8))

# 返回提取的水印    return watermark

测试代码embedded_image = 'SP.jpg'extracted_watermark = extract_watermark(embedded_image)

打印提取的水印print(extracted_watermar

基于DCT算法的Python图片隐写术:嵌入与提取隐藏水印

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

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