图像DCT水印嵌入提取程序
时间: 2023-12-12 17:04:20 浏览: 110
以下是一个基于Python的图像DCT水印嵌入和提取程序:
```python
import cv2
import numpy as np
# 将水印嵌入到图像中
def embed_watermark(img_path, watermark_path, alpha):
# 读取图像和水印
img = cv2.imread(img_path)
watermark = cv2.imread(watermark_path, cv2.IMREAD_GRAYSCALE)
watermark = cv2.resize(watermark, (64, 64))
# 对图像进行DCT变换
img_dct = cv2.dct(np.float32(img))
# 将水印嵌入到DCT系数中
for i in range(64):
for j in range(64):
if watermark[i, j] > 128:
img_dct[i, j] += alpha
else:
img_dct[i, j] -= alpha
# 对DCT系数进行反变换,并保存图像
img_watermarked = cv2.idct(img_dct)
cv2.imwrite('watermarked_image.png', img_watermarked)
# 从图像中提取水印
def extract_watermark(img_path, alpha):
# 读取图像
img = cv2.imread(img_path)
# 对图像进行DCT变换
img_dct = cv2.dct(np.float32(img))
# 提取水印
watermark = np.zeros((64, 64), dtype=np.uint8)
for i in range(64):
for j in range(64):
if img_dct[i, j] - img_dct[i-1, j-1] > alpha:
watermark[i, j] = 255
# 保存水印
cv2.imwrite('extracted_watermark.png', watermark)
# 示例
embed_watermark('original_image.png', 'watermark.png', 30)
extract_watermark('watermarked_image.png', 30)
```
该程序先将原始图像进行DCT变换,然后将水印嵌入到DCT系数中,最后对DCT系数进行反变换得到带水印的图像。提取水印时,先对图像进行DCT变换,然后根据DCT系数的变化提取水印。该程序仅供参考,实际应用中需要考虑更多的细节和安全性。
阅读全文