opencv for python之简单数字水印

利用opencv for python在lena图中隐藏了数字水印
非常之奇妙有趣,主要是利用了位运算

from cv2 import cv2
import numpy as np
lena = cv2.imread('black.bmp')
watermark = cv2.imread('watermask.bmp')
#图片原本是0和255两个值的图片
#为将其嵌入最低位,将其变为0和1的二值图片
w = watermark[:,:]>0
watermark[w] = 1
#用全为254的矩阵(二进制表示为7个1,最后一位为0)
get_H7_matrix = np.ones(lena.shape,dtype= np.uint8)*254
#用此矩阵与原图进行按位与运算,则提取高7位
lena_H7 = cv2.bitwise_and(lena,get_H7_matrix)
#将最后一位一定为0的高七位矩阵,与最后一位为0或1的水印
#进行按位或运算,则水印的0和1将原封不动的到最低位上去
result = cv2.bitwise_or(lena_H7,watermark)
#下面进行提取
#思路是:利用全1矩阵与图像按位与,则提取最低位的数字
get_L1_matrix = np.ones(lena.shape,dtype=np.uint8)
result1 = cv2.bitwise_and(get_L1_matrix,result)
w = result1[:,:]>0
result1[w] = 255
cv2.imshow('lena',lena)
cv2.imshow('watermark',watermark*255)
cv2.imshow('result',result)
cv2.imshow('result1',result1)
cv2.waitKey()
cv2.destroyAllWindows()

效果如下:
效果
主要参考:《OpenCV轻松入门-面向python》李立宗著

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值