首页 » SEO优化 » phpopencv数字水印技巧_OpenCV6数字水印的嵌入与提取

phpopencv数字水印技巧_OpenCV6数字水印的嵌入与提取

访客 2024-11-18 0

扫一扫用手机浏览

文章目录 [+]

通过在最低有效位的位平面分解图中隐蔽二值图像信息,具有极高的暗藏性。
以是,交情提示各位程序员,不要以为网上的图像可以随便用,现在的加密办法真是让你防不胜防。
就算你知道了添加数值谁水印的事理,恐怕也无法找到其哪个是秘密的信息。
(尊重版权,不要存在侥幸生理)

数字水印的处理过程

从位平面来看,数字水印的处理过程分为如下几步:

phpopencv数字水印技巧_OpenCV6数字水印的嵌入与提取

(1)嵌入过程:将载体图像的第0个位平面更换为数字水印信息。

phpopencv数字水印技巧_OpenCV6数字水印的嵌入与提取
(图片来自网络侵删)

(2)提取过程:将载体图像的最低有效位平面提取出来,得到数字水印信息。

代码实现嵌入与提取数字水印

事理我们都清楚之后,我们可以直接开始编写代码:

import cv2import numpy as npimg = cv2.imread("4.jpg", 0)watermark = cv2.imread("watermark.jpg", 0)#由于水印图像便是让人不易察觉也不影响原图像,以是要将水印非0位全部更换位最小值1w = watermark[:, :] > 0watermark[w] = 1#嵌入水印r, c = img.shape#天生元素都是254的数组img254=np.ones((r,c),dtype=np.uint8)254#获取高7位平面imgH7=cv2.bitwise_and(img,img254)#将水印嵌入即可water_img=cv2.bitwise_or(imgH7,watermark)cv2.imshow("1",img)cv2.imshow("2",watermark255)cv2.imshow("3",water_img)#天生都是1的数组img1=np.ones((r,c),dtype=np.uint8)#提打水印water_extract=cv2.bitwise_and(water_img,img1)#将水印里面的1还原成255w=water_extract[:,:]>0water_extract[w]=255cv2.imshow("4",water_extract)cv2.waitKey()cv2.destroyAllWindows()

前面我们先容过,图像的最低位平面便是00000001,而其他7个位平面合并便是11111110,也便是254,以是我们创建了一个全部为254的数组。
通过它获取高7个位平面,然后与数字水印图合并即可。

同样的,提取图像中数字水印,我们只须要获取最低有效位平面,然后将其1值,全部换成255,就可以显示出原水印图。

运行之后,显示的效果如下图所示:

标签:

相关文章