python利用opencv去除水印方法
OpenCV(Open Source Computer Vision Library)是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法
在python中可以利用opencv来去除水印
opencv安装
window10
OpenCV 3:http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
Numpy:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
将下载好的whl文件放置到一个方便的目录,打开cmd,安装
pip install xxx
测试
import cv2
没有报错则说明成功
参考自https://www.ywlib.com/archives/39.html
下面开始去除水印, 使用58图片做测试
基于OpenCV的两种去水印方案
1. 基于 inpaint 方法(网上的方法,处理质量较低)
- 算法理论:基于Telea在2004年提出的基于快速行进的修复算法(FMM算法),先处理待修复区域边缘上的像素点,然后层层向内推进,直到修复完所有的像素点
- 处理方式:由ui人员制作出黑底白色水印且相同位置的水印蒙版图(必须单通道灰度图),然后使用inpaint方法处理原始图像,具体使用时可把水印区放粗,这样处理效果会好点
需要带水印的图,和该图一样大小的的黑底白色水印且位置相同的水印图
test_dir = 'xxx'
mask_dir = 'xxx'
save_dir ='xxx'
src = cv2.imread(rental_dir)
mask = cv2.imread(wm_dir, cv2.IMREAD_GRAYSCALE)
dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_TELEA)
cv2.imwrite(save_dir, dst)
2. 基于像素的反色中和(处理质量较高)
参考自ps去水印原理,通过一张白底的反色水印图来中和原图水印
需要到水印的图,和该图一样大小的白底棕色(128,128,128)的水印且位置相同的水印图,128的效果比较好
test_dir = 'xxx'
mask_dir = 'xxx'
save_dir ='xxx'
src = cv2.imread(test_dir)
mask = cv2.imread(mask_dir)
save = numpy.zeros(src.shape, numpy.uint8)
for row in range(src.shape[0]):
for col in range(src.shape[1]):
for channel in range(src.shape[2]):
if mask[row, col, channel] == 0:
val = 0
else:
reverse_val = 255 - src[row, col, channel]
val = 255 - reverse_val * 256 / mask[row, col, channel]
if val < 0:
val = 0
save[row, col, channel] = val
cv2.imwrite(save_dir, save)
第二种方面明显比第一种要好,但是水印的边角处理不好,可以先用二在用一,效果会更好
参考自https://my.oschina.net/u/2400083/blog/732321
python利用opencv去除水印方法的更多相关文章
- python 利用opencv去除图片水印
python 去除水印"人工"智能去除水印 这两天公司来了一个新的需求--去除水印,对于我一个从未接触过的这种事情的人来说,当时我是蒙的.不过首先我就去搜索了一下是否有该种合适的功 ...
- AnyChartStock去除水印方法
最近在使用AnyChartStock的图表,功能很强大,但下载过来是有水印的,虽然网上也有很多破解无水印的版本,但基本都是AnyChart的,AnyChartStoc的几乎没有.所以自己尝试着去除水印 ...
- python利用opencv合成模糊图像
之前需要评估图像质量来筛选成像质量不错的图片,去除由于对焦,运动等造成的模糊图像,所以在构建数据集的时候考虑用opencv对清晰的图片进行处理获得模糊的图片从而进行训练. 1) 运动模糊图像 一般来说 ...
- PS快速去除水印方法
步骤 第一步:打开PS软件,鼠标左键单击左上角"文件"-"打开",选择一张图片 第二步:鼠标左键单击左边的工具栏"矩形选框工具" 第三步:鼠 ...
- [Python]爬虫获取知乎某个问题下所有图片并去除水印
获取URL 进入某个知乎问题的主页下,按F12打开开发者工具后查看network面板. network面板可以查看页面向服务器请求的资源.资源的大小.加载资源花费的时间以及哪些资源加载失败等信息.还可 ...
- BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路
BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...
- 用 Python 排序数据的多种方法
用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...
- python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)
python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...
- 利用opencv作透明重叠人群密度热度图
在作热度图的时候我们经常需要将热度图调整透明度后叠加在原图上达到更好的展示效果.比如检测人气密度的热度图: (来自sensetime) 一般作图的时候会第一时间想到matplotlib,因为可以很方便 ...
随机推荐
- http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤
http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1) 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成 ...
- POJ-2398
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4243 Accepted: 2517 Descr ...
- redis之(一)redis的简单介绍
[一]:概念 --->Redis是一个开源的,高性能的,基于键值对的缓存与存储系统 --->Redis数据库中的多有数据都存储在内存中,由于内存的读写速度远快于硬盘,一秒读写超过10万键值 ...
- prometheus 结合 kubernetes时,提示User cannot list services at the cluster scope.如何解决?
这表示认证这一阶段已通过,赋权未到位. 但kube-prometheus是一体化,全家桶安装,我试过几次自定义clusterRole,binding,都解决不完全. 于是来个快刀. 搞定. kubec ...
- Java字符串易错方法总结
Java字符串易错方法总结 public String[] split(String regex) 和 public String[] split(String regex,int limit) li ...
- 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]
题目传送门 数字序列 题目描述 给定一个整数序列 a1,a2,⋅⋅⋅,an ,求出一个递增序列 b1<b2<⋅⋅⋅<bn ,使得序列 ai 和 bi 的各项之差的绝对 ...
- EL使用技巧
☞控制页面元素显示与否 实现效果: 实现方案: ...... <div style="display:${empty param.hideTitle ? 'auto' : 'none' ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- bzoj 4017: 小Q的无敌异或
4017: 小Q的无敌异或 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 593 Solved: 197[Submit][Status][Discu ...
- POJ ???? Monkey King
题目描述 Once in a forest, there lived N aggressive monkeys. At the beginning, they each does things i ...