写python 程序原图图片Pjpgwmjpg盲水印的图片SP的数学模型使得图片SPjpg与原图P基本形同。生成图片的算法python 程序。和生成的图片中解析出信息的python 程序要求很好的鲁棒性
生成图片SP的算法可以使用盲水印嵌入技术。盲水印嵌入技术是一种将水印信息嵌入到原图中的方法,使得水印信息对原图的视觉效果影响较小。
下面是一个使用DCT变换的盲水印嵌入算法的Python程序示例:
import cv2
import numpy as np
from scipy.fftpack import dct, idct
def embed_watermark(P, wm, alpha):
# 读取原图和水印图
img_P = cv2.imread(P, 0)
img_wm = cv2.imread(wm, 0)
# 对原图和水印图进行DCT变换
img_P_dct = dct(dct(img_P.T, norm='ortho').T, norm='ortho')
img_wm_dct = dct(dct(img_wm.T, norm='ortho').T, norm='ortho')
# 获取原图和水印图的大小
height, width = img_P.shape
# 计算水印图的均值
wm_mean = np.mean(img_wm)
# 将水印图嵌入到原图中
for i in range(height):
for j in range(width):
img_P_dct[i, j] += alpha * (img_wm_dct[i, j] - wm_mean)
# 对嵌入水印后的图像进行IDCT逆变换
img_SP = idct(idct(img_P_dct.T, norm='ortho').T, norm='ortho')
# 将像素值限制在0-255之间
img_SP = np.clip(img_SP, 0, 255)
# 保存生成的图片
cv2.imwrite('SP.jpg', img_SP)
# 示例调用
embed_watermark('P.jpg', 'wm.jpg', 0.01)
以上代码中,embed_watermark函数接受三个参数,分别是原图路径P、水印图路径wm和嵌入参数alpha。函数首先读取原图和水印图,并对它们进行DCT变换。然后计算水印图的均值,并将水印图嵌入到原图的DCT系数中。最后对嵌入水印后的图像进行IDCT逆变换,并保存生成的图片。
生成的图片中解析出信息的Python程序示例:
import cv2
import numpy as np
from scipy.fftpack import dct, idct
def extract_watermark(SP, wm):
# 读取生成的图片和原水印图
img_SP = cv2.imread(SP, 0)
img_wm = cv2.imread(wm, 0)
# 对生成的图片进行DCT变换
img_SP_dct = dct(dct(img_SP.T, norm='ortho').T, norm='ortho')
# 获取生成的图片和原水印图的大小
height, width = img_SP.shape
# 计算原水印图的均值
wm_mean = np.mean(img_wm)
# 提取嵌入的水印信息
extracted_wm = np.zeros_like(img_wm)
for i in range(height):
for j in range(width):
extracted_wm[i, j] = (img_SP_dct[i, j] - dct(img_SP[i, j])) / alpha + wm_mean
# 将像素值限制在0-255之间
extracted_wm = np.clip(extracted_wm, 0, 255)
# 保存提取的水印图
cv2.imwrite('extracted_wm.jpg', extracted_wm)
# 示例调用
extract_watermark('SP.jpg', 'wm.jpg')
以上代码中,extract_watermark函数接受两个参数,分别是生成的图片路径SP和原水印图路径wm。函数首先读取生成的图片和原水印图,并对生成的图片进行DCT变换。然后计算原水印图的均值,并根据嵌入参数alpha提取嵌入的水印信息。最后将提取的水印图保存到本地。
这两个程序使用了DCT变换来进行水印嵌入和提取,具有较好的鲁棒性。但请注意,由于图片处理的复杂性和多样性,可能需要根据具体情况进行调整和优化。
原文地址: https://www.cveoy.top/t/topic/ijHN 著作权归作者所有。请勿转载和采集!