计算机视觉经典案例---从入门到深入学习(基于python---OpenCV)案例二:数字水印

'''观察灰度图像的各个位平面'''
# import cv2
# import numpy as np
# a = cv2.imread("D:\\img\\lena.bmp",0)
# r,c = a.shape      #获取原图像的行列
# x = np.zeros((r,c,8),np.uint8)  #构造提取空矩阵
# for i in range(8):
#      x[:,:,i] = 2**i     #构造每一层的提取矩阵
# ri = np.zeros((r,c,8),np.uint8)     #结果位平面
# for i in range(8):
#     ri[:,:,i] = cv2.bitwise_and(x[:,:,i],a)    #提取每一层的位平面
#     mask = ri[:,:,i] > 0        #转化为二值图像,否则显示不清楚
#     ri[mask] = 255
#     cv2.imshow(str(i),ri[:,:,i])
# cv2.waitKey()
# cv2.destroyAllWindows()


# '''模拟数字水印的嵌入与提取过程'''
# import cv2
# import numpy as np
# img = cv2.imread("D:\\img\\lena.bmp",0)
#                 #嵌入水印过程
# T1 = np.ones(img.shape,np.uint8)*254    #构造提取矩阵
# LSB0 = cv2.bitwise_and(img,T1)      #将最低位图像位平面清0
# W = cv2.imread("D:\\img\\watermark.bmp",0)
# WT = W.copy()   #复制一份图像,防止对原图像产生破坏
# WT[W>0] = 1     #将0-255的图象转化为二值化图像0,1
# WO = cv2.bitwise_or(WT,LSB0)    #将水印加入最低位图像位平面清0的图象
#             # 提取水印过程
# T2 = np.ones(img.shape,np.uint8)    #构造提取矩阵
# EWB = cv2.bitwise_and(T2,WO)     #提取最低位为图像即数字水印01二值化图
# EW = EWB.copy()
# EW[EWB>0] = 255
# cv2.imshow("original",img)
# cv2.imshow("shuiyin",W)
# cv2.imshow("jiami",WO)
# cv2.imshow("tiqushuiyin",EW)
# cv2.waitKey()
# cv2.destroyAllWindows()

# '''使用ROI构造可视化水印'''
# import cv2
# import numpy as np
# a = cv2.imread("D:\\img\\lena.bmp",0)
# b = cv2.imread("D:\\img\\watermark.bmp",0)
# c = b.copy()
# c[c>0] = 1
# d = a*c
# e = 255-b
# f = d+e
# cv2.imshow("A",a)
# cv2.imshow("b",b)
# cv2.imshow("c",c*255)
# cv2.imshow("d",d)
# cv2.imshow("e",e)
# cv2.imshow("f",f)
# cv2.waitKey()
# cv2.destroyAllWindows()

# '''模拟数字水印嵌入和提取过程(加法,add,addweigted函数)'''
# import cv2
# a = cv2.imread("D:\\img\\lena.bmp",0)
# b = cv2.imread("D:\\img\\watermark.bmp",0)
# ib = 255 - b  #制作反色图
# add1 = a + b
# add2 = cv2.add(a,ib)
# add3 = cv2.addWeighted(a,0.7,b,0.3,0)
# cv2.imshow("add1",add1)
# cv2.imshow("add2",add2)
# cv2.imshow("add3",add3)
# cv2.imshow("fanse",ib)
# cv2.waitKey()
# cv2.destroyAllWindows()

# '''采用算术运算法实现数字水印'''
# import cv2
# import numpy as np
#     # 定义一个嵌入函数
# def insert(img,watermark):
#     img = img - img % 2
#     watermark = (watermark/255).astype(np.uint8)
#     iw = img + watermark
#     cv2.imshow("original",img)
#     cv2.imshow("insert",iw)
#     return iw
#         # 定义一个提取函数
# def extract(iw) :
#     ew = iw % 2
#     ew = ew * 255
#     cv2.imshow("extract",ew)
#         # 主程序
# img = cv2.imread("D:\\img\\lena.bmp",0)
# watermark = cv2.imread("D:\\img\\watermark.bmp",0)
# iw = insert(img,watermark)      #这里用iw接收一下图像,是为了防止下一行代码找不到iw
# extract(iw)
# cv2.imshow("shuiyin", watermark)
# cv2.waitKey()
# cv2.destroyAllWindows()

# '''按位或运算实现艺术字'''
# import cv2
# a = cv2.imread("D:\\img\\lena.bmp",0)
# b = cv2.imread("D:\\img\\watermark.bmp",0)
# c = cv2.bitwise_or(a,b)
# cv2.imshow("yishuzi",c)
# cv2.waitKey()
# cv2.destroyAllWindows()
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值