opencv-16 图像去水印示例

news2024/11/24 11:51:44

常用的去水印方法:

克隆修复工具:使用图像处理软件(如Photoshop)中的克隆修复工具可以选择一个样本区域,然后将其复制到水印区域,以覆盖水印。这种方法在简单的水印上可能效果不错,但复杂的水印可能需要更多的手动调整。

模糊或马赛克处理:可以使用模糊或马赛克工具对水印进行处理,以使其模糊不清或完全不可识别。但这可能会导致图像细节损失,对图像质量有一定影响。

反相处理:对图像进行反相处理可能会削弱水印的效果,但这对于所有类型的水印并不总是有效。

频域处理:利用图像的频域特性,例如使用傅里叶变换等技术来检测并去除水印。这需要一定的图像处理知识和工具。

混合模式调整:通过调整图像的混合模式(如减淡、变暗等),有时可以减轻水印的可见程度。

图像修复算法:一些先进的图像修复算法可以帮助填补或去除水印,这些算法通常基于深度学习和人工智能技术

opencv 去除水印更多层面是原理性的展示操作,实际应用中更多的是通过机器学习或者利用工具来应用

编写程序,模拟数字水印的嵌入和提取过程。

import cv2
import numpy as np

def zh_ch(string):
    return string.encode('gbk').decode(errors='ignore')
#读取原始载体图像
lena=cv2.imread("lena.png",0)
#读取水印图像
watermark=cv2.imread("watermark.bmp",0)
#将水印图像内的值 255 处理为 1,以方便嵌入
#后续章节会介绍使用 threshold 处理
w=watermark[:,:]>0
watermark[w]=1
#读取原始载体图像的 shape 值
r,c=lena.shape
#============嵌入过程============
#生成元素值都是 254 的数组
t254=np.ones((r,c),dtype=np.uint8)*254
#获取 lena 图像的高七位
lenaH7=cv2.bitwise_and(lena,t254)
#将 watermark 嵌入 lenaH7 内
e=cv2.bitwise_or(lenaH7,watermark)
#============提取过程============
#生成元素值都是 1 的数组
t1=np.ones((r,c),dtype=np.uint8)
#从载体图像内提取水印图像
wm=cv2.bitwise_and(e,t1)
print(wm)
#将水印图像内的值 1 处理为 255,以方便显示
#后续章节会介绍使用 threshold 实现
w=wm[:,:]>0
wm[w]=255
#============显示============


cv2.imshow(zh_ch('原图'),lena,)
cv2.imshow(zh_ch("水印"),watermark*255) #当前 watermark 内最大值为 1
cv2.imshow(zh_ch("加水印图"),e)
cv2.imshow(zh_ch("提取水印图像"),wm)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:
运行

图(a)是原始图像 lena。
 图(b)是水印图像 watermark。在程序中,该图像首先会被处理为二值图像,在显示时将
其元素值乘以 255,以方便显示。
 图©是在图像 lena 内嵌入水印图像 watermark 后得到的含水印载体图像 e。
 图(d)是从含水印载体图像 e 内提取到的水印图像 wm。

通过肉眼无法观察出含水印载体图像和原始图像的不同,水印的隐
蔽性较高。但是,由于该方法过于简单,其安全性并不高,在实际处理中会通过更复杂的方式实现水印的嵌入。

这是简单的水印处理,从水印原理来看这是一个不可逆转的操作,如果想要开发这种系统,要么就针对性的某一个水印去除,要么 针对不可预知的水印 就要深度学习来操作了。这块后面实验讲解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMU 15-445 -- Concurrency Control Theory - 13

CMU 15-445 -- Concurrency Control Theory - 13 引言TransactionsStrawman/Simple SystemFormal DefinitionsAtomicityLoggingShadow Paging ConsistencyIsolationConflicting OperationsDependency Graphs(依赖图)VIEW SERIALIZABILITY(视图可串行化) …

配置SQL提示

问题描述 SpringBoot工程中:使用Select注入的时候没有提示 例如: 在正常情况下: 在没有配置SQL提示的时候: 原因分析: 没有进行SQL配置 解决方案: 选中Select注入中的SQL语句,使用IDEA中的快…

第二天 kali代理配置

文章目录 环境一、虚拟机网络模式(1)NAT(2)NAT模式(3)桥接模式(4)仅主机模式(5)总结 二、配置代理(桥接模式)1、基础设置2、虚拟机浏览…

GO语言安全工具开发方向探索

声明:文章所涉及的代码进攻参考和学习,文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 文章目录…

ubuntu环境安装centos7虚拟机网络主机不可达,ping不通

【NAT模式下解决】1.首先vi /etc/sysconfig/network-scripts/ifcfg-ens33检查ONBOOTyes,保存 2.输入systemctl restart network命令重启网关

数据结构【排序】

第七章 排序 一、排序 1.定义:将无序的数排好序 ; 2.稳定性: Kᵢ和Kⱼ中,Kᵢ优先于Kⱼ那么在排序后的记录中仍然保持Kᵢ优先; 3.评价标准:执行时间和所需的辅助空间,其次是算法的稳定性&#xf…

三,创建订单微服务消费者 第三章

4.3 修改pom添加依赖 <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--监控--><dependency><groupId&g…

ssm笔记

1.IOC和DI配置文件开发 spring&#xff0c;主要内容有两点&#xff1a;IOC&#xff0c;AOP。AOP里面spring独到的事务处理。 理清spring框架设计思想 1.1.Spring Framework系统架构 spring4架构图 系统架构讲究上层依赖于下层 Data Access&#xff1a;数据访问Data Inte…

Win10查看端口占用的方法,并且释放端口

1、按下winR&#xff0c;输入“cmd”&#xff0c;进入黑窗口 2、查询端口&#xff0c;获取到pid //查询所有的端口 netstat -ano//查询指定端口 netstat -ano|findstr 8080 3、查看指定 Pid 进程信息&#xff0c;获取到其运行的服务是什么&#xff0c;这里运行的是Java服务&a…

IIC 学习笔记

IIC 学习笔记 参考链接 https://www.bilibili.com/video/BV1dg4y1H773/?-Arouterstory&buvidXU95A24969E15627051070CAD21A455F5D312&is_story_h5false&midqdyXUrDWOqUn9wT3ra56lA%3D%3D&p1&plat_id163&share_fromugc&share_mediumandroid&…

Jmeter常见问题之URI异常

这篇文章介绍一下"http://"重复导致的URI异常问题&#xff0c;通常从浏览器地址栏复制url&#xff0c;直接粘贴到Jmeter的http请求的服务器地址中会默认带上“http://”&#xff0c;要将http://删除&#xff0c;只写IP地址&#xff0c;如下图&#xff1a; 否则&…

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以? 1. 什么是TCP协议? TCP&#xff1a;Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议RFC 793对TCP连接的定义 > Connections: >…

深度学习常用优化器总结,具详细(SGD,Momentum,AdaGrad,Rmsprop,Adam,Adamw)

学习需要&#xff0c;总结一些常用优化器。 目录 前言SGD&#xff1a;随机梯度下降BGD&#xff1a;批量梯度下降MBGD&#xff1a;小批量梯度下降MomentumAdaGradRMSpropAdam: Adaptive Moment EstimationAdamW参考文章 前言 优化器的本质是使用不同的策略进行参数更新。常用的…

从不同的使用场景认识STag26

当你买下STag26时&#xff0c; 你买到的是什么&#xff1f; 如果你是商超生鲜区的经理&#xff0c; 你买到的是在促销旺季时的高效与安心。 你不用再担心价格没有及时更新&#xff0c; 导致水果蔬菜的滞销。 毕竟&#xff0c;STag26能够一键改价&#xff0c;实时更新&#x…

Linux の shell 流程控制

条件控制 # if then 如果else 没有语句 可以省略 if condition then#语句 fi# if then 。。。 else 。。。 fi if condition then#语句 else#语句 fi# if condition then#语句 elif condition2 then#语句 else#语句 fiif [ $a -gt $b ] thenecho "a > b&quo…

自学网络安全(黑客)一定要注意什么

自学网络安全&#xff08;黑客&#xff09;时&#xff0c;你需要注意以下几点&#xff1a; 合法性&#xff1a;确保你的学习和实践活动是合法的。未经授权的入侵、攻击或侵犯他人隐私的行为是违法的&#xff0c;并可能导致严重的法律后果。 遵守道德准则&#xff1a;确保你的学…

【漏洞通知】Apache Shiro又爆认证绕过漏洞CVE-2023-34478,漏洞等级:高危

2023年7月24日&#xff0c;Apache Shiro发布更新版本&#xff0c;修复了一个身份验证绕过漏洞&#xff0c;漏洞编号&#xff1a;CVE-2023-34478&#xff0c;漏洞危害等级&#xff1a;高危。 Apache Shiro版本1.12.0之前和2.0.0-alpha-3 之前容易受到路径遍历攻击&#xff0c;当…

Vue组件自定义事件

v-on:xxx"" &#xff1a;绑定 this.$emit(xxx) : 触发 this.$off() : 解绑 App.vue <template><div class"app"><h1>{{msg}}</h1><!--通过父组件给子组件传递函数类型的props实现&#xff1a;子给父传递参数--><…

观察者模式、中介者模式和发布订阅模式

观察者模式 定义 观察者模式定义了对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到通知&#xff0c;并自动更新 观察者模式属于行为型模式&#xff0c;行为型模式关注的是对象之间的通讯&#xff0c;观察者模式…

【洛谷算法题】B2025-输出字符菱形【入门1顺序结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】B2025-输出字符菱形【入门1顺序结构】&#x1f30f;题目描述&#x1f30f;输入格…