opencv-python之位平面分解与数字水印

news/2024/5/5 21:31:37/文章来源:https://blog.csdn.net/ncu5509121083/article/details/126619701

位平面分解与数字水印

  • 位平面分解与数字水印
    • 位平面分解
      • 1.图像预处理
      • 2.构造提取矩阵
      • 3.位平面提取
      • 4.阈值处理
      • 5.显示图像
    • 简单的数字水印
      • 1.载体图像预处理
      • 2.水印图像处理
      • 3.水印添加
      • 4.水印提取

位平面分解与数字水印

两张素材:
在这里插入图片描述
在这里插入图片描述

位平面分解

图像矩阵中的每个值是一个八位二进制数,它可以表示为:
value=a0⋅20+a1⋅21+a2⋅22+a3⋅23+a4⋅24+a5⋅25+a6⋅26+a7⋅27ai=0/1value=a_0·2^0+a_1·2^1+a_2·2^2+a_3·2^3+a_4·2^4+a_5·2^5+a_6·2^6+a_7·2^7 \\ a_i=0/1 value=a020+a121+a222+a323+a424+a525+a626+a727ai=0/1
将整个矩阵的值的 ai⋅2ia_i·2^{i}ai2i 提取出来,得到新的8个矩阵,称这8个矩阵为图像的位平面。

可以通过按位与实现。

1.图像预处理

获取图像的形状

# 图像预处理
image = cv2.imread("./monalisa.png")
shape=image.shape

2.构造提取矩阵

2i2^i2i作按位与运算,可以得到第i位的值

故需构造8个值全为2i2^i2i 的矩阵

# 构造提取矩阵
for i in range(8):bit_mat=np.ones(shape)*(2**i)

3.位平面提取

与提取矩阵分别进行按位与运算

	# 位平面提取result=cv2.bitwise_and(image,bit_mat)

4.阈值处理

为了让位平面更加清晰可见,将 2i2^i2i 全都处理为255

	# 阈值处理for j in range(3):mask=result[:,:,j]>0result[mask]=255

5.显示图像

	# 显示图像cv2.namedWindow(f"bit {i}", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)cv2.imshow(f"bit {i}",result)
import cv2
import numpy as np# 图像预处理
image = cv2.imread("./monalisa.png")
shape = image.shape# 构造提取矩阵
for i in range(8):bit_mat = np.ones(shape, dtype=np.uint8) * (2**i)# 位平面提取result = cv2.bitwise_and(image, bit_mat)# 阈值处理for j in range(3):mask = result[:, :, j] > 0result[mask] = 255# 显示图像cv2.namedWindow(f"bit {i}", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)cv2.imshow(f"bit {i}", result)# 关闭窗口
key = chr(cv2.waitKey())
if key == "1":print("图像显示结束")cv2.destroyAllWindows()

在这里插入图片描述

简单的数字水印

最低有效位指的是第0位。它影响整个图像的程度更低。我们可以把一些信息隐藏到最低有效位平面中。

可称之为数字水印。

1.载体图像预处理

将数字与11111110(十进制为254)作按位与,可以保留前7位,将第0位设置为0

image = cv2.imread("./monalisa.png")
bit_mat=np.ones(image.shape, dtype=np.uint8) * (254)
image=cv2.bitwise_and(image,bit_mat)

2.水印图像处理

将正值全部设置为1,方便嵌入载体图像的第0位

info=cv2.imread("./info.png")
for j in range(3):info_mask = info[:, :, j] > 0info[info_mask] = 1

3.水印添加

将处理完后的载体图像与水印图像作按位或运算,可以将水印图像嵌入载体图像的第0位

result1=cv2.bitwise_or(image,info)
cv2.namedWindow("in", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.imshow("in",result1)

4.水印提取

用全1矩阵与添加完水印的图像作按位与运算,提取第0位,并扩大到255倍,方便显示水印图像

# 水印提取
bit_mat=np.ones(image.shape, dtype=np.uint8)
result2=cv2.bitwise_and(result1,bit_mat)*255
cv2.namedWindow("out", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.imshow("out",result2)
import cv2
import numpy as np# 载体图像预处理
image = cv2.imread("./monalisa.png")
bit_mat=np.ones(image.shape, dtype=np.uint8) * (254)
image=cv2.bitwise_and(image,bit_mat)# 水印图像处理
info=cv2.imread("./info.png")
for j in range(3):info_mask = info[:, :, j] > 0info[info_mask] = 1# 水印添加
result1=cv2.bitwise_or(image,info)
cv2.namedWindow("in", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.imshow("in",result1)# 水印提取
bit_mat=np.ones(image.shape, dtype=np.uint8)
result2=cv2.bitwise_and(result1,bit_mat)*255
cv2.namedWindow("out", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.imshow("out",result2)key = chr(cv2.waitKey())
if key == "1":print("图像显示结束")cv2.destroyAllWindows()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_3450.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术分享 | 黑盒测试方法论—等价类

等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。需要把用户所有可能输入的数据,划分成若…

JAVA----钉钉机器人消息样式,关于PC 端与手机端文字消息样式显示不统一

关于PC 端与手机端文字消息样式显示不统一 颜色 String message "<font color#e60020>" 欢迎您加入公司&#xff01; "</font>";不加引号 或 加双引号String message "<font color\"#e60020\">" 欢迎您加入公…

新课标、新考法,猿辅导创新教育研究院全面拆解新课标

“义务教育课程方案和课程标准&#xff08;2022 年版&#xff09;”&#xff0c;也就是众多周知的“新课标”已于今年4月正式颁布。近日&#xff0c;各地的2022秋季学期已陆续开学&#xff0c;这版新修订的义务教育课程也将进入实施阶段。那么&#xff0c;这版新课标究竟有哪些…

RocketMQ的架构设计

目录 1 、技术架构 2、部署架构 2.1、RocketMQ 网络部署特点 2.2、结合部署架构图&#xff0c;描述集群工作流程&#xff1a; 1 、技术架构 RocketMQ架构上主要分为四部分&#xff0c;如上图所示: Producer&#xff1a;消息发布的角色&#xff0c;支持分布式集群方式部署。…

图神经网络(三):数学基础

一.复数空间 在实数空间中&#xff0c;加法、减法可以看成是沿数轴的左右平移&#xff0c;乘法、除法可以看成是沿数轴的拉伸和压缩。但是在现实生活中除了平移和缩放以外&#xff0c;还存在旋转。在复数发明之前&#xff0c;处理旋转问题是非常麻烦的。 1.复数的定义 i2i^2i…

yolo系列之yolov3(3)

文章目录前言v3改动backBone先验框的设定改变特征图的提取loss函数的修改softmax 改进MSE 和交叉熵损失函数前言 v1和v2可以参考前两篇文章v1&#xff1a;https://blog.csdn.net/monk96/article/details/126603180?spm1001.2014.3001.5502v2:https://blog.csdn.net/monk96/ar…

Redis 非关系型数据库学习(三)---- Redis 基础知识

文章目录Redis 非关系型数据库学习&#xff08;三&#xff09;---- Redis 基础知识&#xff08;1&#xff09;Redis 数据库select 切换当前数据库Dbsize 查看数据库key数量&#xff08;2&#xff09;查看数据库的keykeys [partten]&#xff08;3&#xff09;清除数据库的 keyfl…

【沐风老师】3DMAX散布插件scat_pro v1.1使用教程

【ScatPro简介】 3DMAX超级散布插件ScatPro是一个max脚本小工具&#xff0c;可以帮助你散布3D对象到曲面。在家具建模、建筑建模方面都有很大的帮助&#xff0c;可以提高工作效率。 ScatPro插件非常适合编织类建模&#xff0c;这将大大解放我们的双手&#xff0c;提高工作效率…

http和tcp

http http - 浏览器和服务器交互的超文本传输协议 https - http ssl (建安全通道,确保数据传输&#xff0c;网站真实性) http 80 身份容易被伪装 内容容易被篡改窃取 收集流动的数据包且解析&#xff0c;可以交给抓包工具 Https 443 需证书费用高 对传输内容进行加密 身份认证…

【RabbitMQ学习笔记】第一章 MQ的基本概念

文章目录1、MQ概述2、MQ的优势3、MQ的劣势4、常见的MQ产品1、MQ概述 MQ全称Message Queue&#xff0c;消息队列&#xff0c;是在消息的传输过程中保存消息的容器&#xff0c;多用于分布式系统之间进行通信。 2、MQ的优势 总结六个字&#xff1a; 解耦、异步、削峰 优势说明…

2022几款开源的态势感知、攻击监控、日志分析等平台调研

目录态势感知、攻击监控、日志分析等平台调研一. OSSIM开源安全信息管理系统功能展示主界面1. DASHBOARDS模块a. OverViewb.Deployment status&#xff1a;资产部署的分类及状态信息c. Risk Mapsd. Open Threat Exchang&#xff1a;在地图中显示OTX变化趋势及IP信誉2. ANALYSIS…

javaweb JAVA JSP汽车销售系统商城购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上汽车

JSP汽车销售系统商城购物系统jsp购物系统购物商城系统源码&#xff08;jsp电子商务系统&#xff09;网上汽车

打破平台限制,小程序如何在硬件设备上运行?

在小程序技术日益成熟、生态日益善的前景下&#xff0c;运营者们发现小程序“即用即走、轻量开发”的特点非常契合各种硬件设备的使用场景&#xff1b;开发者们对“一次开发&#xff0c;多端运行”的诉求也变得越来越强烈。 当前在微信、百度、支付宝、今日头条等各大巨头都把…

解决Oracle报错ORA-01403: 未找到任何数据

发现问题 今天在执行某个存储过程的时候&#xff0c;遇到一个报错&#xff0c;提示我ORA-01403: 未找到任何数据 如图所示 问题分析 因为我的报错信息表里有记录着具体的报错位置&#xff0c;所以我很快的能够定位到问题所在&#xff0c;感觉这样找问题真的挺方便的&#x…

NGINX基础知识:从零开始配置高性能服务器

NGINX基础知识&#xff1a;从零开始配置高性能服务器 学习从头开始安装和配置 NGINX Web 服务器。 课程英文名&#xff1a;NGINX Fundamentals High Performance Servers from Scratch 此视频教程共2.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源…

modbus如何添加从机以IO模块举列

连接部分 把两台MXXT设备都使用网线&#xff0c;连接到同一个交换机里面。找一台电脑也连接同交换机或者同局域网内。 软件设置 电脑上打开我们的MXXT配置软件。 点击左上角搜索设备。如上图&#xff0c;我们先双击192.168.1.130.默认密码&#xff1a;1234点确定&#xff0c;进…

云原生中间件RocketMQ-核心原理之同步_异步刷盘,同步_异步复制解析

文章目录发送逻辑消费逻辑刷盘机制同步刷盘异步刷盘配置同步/异步复制解析异步复制同步复制配置推荐使用发送逻辑 发送时&#xff0c;Producer将不同topic的所有消息都会顺序写入Commit Log中&#xff0c;Broker端的后台服务线程—ReputMessageService不停地分发请求并异步构建…

远程连接elasticsearch

做分布式或者集群的时候&#xff0c;需要对elasticsearch做些配置才可以通过端口访问&#xff0c;我这里是以阿里云为例。 前置要有java环境变量。 在阿里云安全组里面开放9200和9300端口&#xff0c;9200用于测试端口是否连上和查看状态。 elasticsearch国内镜像&#xff1a;…

在线客服系统的优势

对于各电商企业来说&#xff0c;在线客服作为直接触达客户的门面&#xff0c;起着至关重要的作用&#xff0c;而优质的话术可以起到催化剂的作用&#xff0c;而快捷回复就是必备工具。 前言 对于各电商企业来说&#xff0c;在线客服作为直接触达客户的门面&#xff0c;起着至关…

深入Spring Boot :整合Redis详解

Spring Boot为Redis的Lettuce和Jedis客户端库提供了基本的自动配置&#xff0c;并且可以使用Spring Data Redis完成更多的操作。本篇将介绍如何整合Redis及使用Redis实现简单的查询缓存&#xff0c;主要包括以下7部分内容&#xff1a; 缓存 Redis Lettuce Spring Data Redis…