9-数字水印的嵌入和提取

复制代码
  在对图像进行操作的过程中,经常会遇到要对图像嵌入和提取数字水印的情况。使用 OpenCV 提供的位运算函数实现对图像嵌入和提取水印的操作,从而将秘密信息嵌入图像或从图像中提取秘密信息。
  有如下原始图像和水印图像:

1.使用位运算实现数字水印的嵌入

python 复制代码
import cv2
import numpy as np
# 读取原图像和水印图像
raccoon = cv2.imread('images/Raccoon.png',0)
watermark = cv2.imread('images/opencv.png',0)
# 将水印图像内的值255处理为1,以方便嵌入
w = watermark[:, :] >0

watermark[w] = 1
# 获取图像raccoon的长宽,生成一个和Raccoon同样大小元素值都是254的数组。
r,c = raccoon.shape
t254 = np.ones([r,c],dtype=np.uint8)*254
# 获取图像Raccoon像素二进制码的高7位,用cv2.bitwise_or()函数将watermark二进制码的最低位嵌入RaccoonH7内。
raccoonH7 = cv2.bitwise_and(raccoon,t254)
e = cv2.bitwise_or(raccoonH7,watermark)
# 展示原始图像Raccoon,水印图像watermark和含水印的载体图像e
cv2.imshow('raccoon',raccoon)
cv2.imshow('watermark',watermark*255)
cv2.imshow('e',e)
cv2.waitKey()

cv2.destroyAllWindows()

运行结果:

2.使用位运算实现数字水印的提取

python 复制代码
import cv2
import numpy as np
# 读取含水印的载体图像e
e = cv2.imread('images/e.png',0)
# 获取图像e的长宽,生成一个和e同样大小元素值都是1的数组
r,c = e.shape
t1 = np.ones([r,c],dtype=np.uint8)
# 使用 cv2.bitwise_and()函数将e与t1经行运算,获取图像e像素二进制码的最低位,并将之存在wm中
wm = cv2.bitwise_and(e,t1)
# 找到wm中大于0的像素,将之置为255,以还原二值水印图像
w = wm[:, :] >0
wm[w] = 255
# 显示原始图像Raccoon,水印图像watermark和含水印的载体图像e
cv2.imshow('e',e)
cv2.imshow('wm',wm)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

说明:

cv2.bitwise_and() 是 OpenCV 中的位运算函数之一,用于对两幅二值图像进行按位"与"操作。具体来说,对于每个像素,将两幅输入图像相应位置的像素值分别进行按位"与"运算,输出的结果图像的对应像素值即为这两幅输入图像对应像素值的按位与结果。

相关推荐
minstbe4 小时前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(进阶版)
人工智能·python·语言模型·llama
GinoInterpreter5 小时前
什么是翻译的去中心化?
人工智能·自然语言处理·去中心化·区块链·机器翻译·机器翻译模型·机器翻译引擎
码农小白AI5 小时前
IACheck AI报告文档审核:高端制造合规新助力,保障标准引用报告质量
大数据·人工智能·制造
_YiFei6 小时前
哪个降论文AI率工具最好用?
人工智能·深度学习·神经网络
放下华子我只抽RuiKe56 小时前
机器学习全景指南-直觉篇——基于距离的 K-近邻 (KNN) 算法
人工智能·gpt·算法·机器学习·语言模型·chatgpt·ai编程
kisshuan123966 小时前
[特殊字符]【深度学习】DA3METRIC-LARGE单目深度估计算法详解
人工智能·深度学习·算法
sali-tec6 小时前
C# 基于OpenCv的视觉工作流-章33-Blod分析
图像处理·人工智能·opencv·算法·计算机视觉
老星*6 小时前
Trae-cn一句话安装OpenClaw:AI智能体框架快速部署指南
人工智能·编辑器
昨夜见军贴06166 小时前
IACheck结合AI报告审核:轨道扣件横向阻力检测报告确保无误差
人工智能
Qt学视觉6 小时前
AI2-Paddle环境搭建
c++·人工智能·python·opencv·paddle