python 去除水印“人工”智能去除水印

这两天公司来了一个新的需求——去除水印,对于我一个从未接触过的这种事情的人来说,当时我是蒙的。不过首先我就去搜索了一下是否有该种合适的功能模块,经过我的筛选,发现opencv应该是最有满足我这个需求可能的模块了。

我先把我的测试例子放上来。

测试图片(你可能在别处看到过,没错就是你看到过的那个例子图)

第一种方法:

  该方法看着是不是很简单?没错就这么几行代码,但是这种方式需要一个美工,让他配合你做一张di.png

di.png

# 方式一
import cv2 def get_water():
# 黑底白字
src = cv2.imread('yuan.png') # 默认的彩色图(IMREAD_COLOR)方式读入原始图像
# black.jpg
mask = cv2.imread('di.png', cv2.IMREAD_GRAYSCALE) # 灰度图(IMREAD_GRAYSCALE)方式读入水印蒙版图像
# 参数:目标修复图像; 蒙版图(定位修复区域); 选取邻域半径; 修复算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果较好)
dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS) cv2.imwrite('result1.jpg', dst) get_water()

   看完上面这么多废话,其实你就想看看效果如何,那么来看一下该方式效果图

  是不是想说效果很差,其实在我所测试使用的方法中,这种方法已经算是效果不错的了。别着急走,下面还有一种比这效果更好的方式

第二种方式:

  还是以上一张图片为例,这种方式还是需要美工配合,只是图片变了,同时换了一种算法模式,但是注意该方法效率不高,使用该图片时

跑一次代码就行了,但是若是别的图片,你可能需要跑几遍代码之后,才能出现最终效果(若你发现采用该方式去除水印,发现去除后的效果,

只是水印颜色变淡了,那么请你在对处理过的图,再次执行该代码,如此多次之后,请用肉眼识别最好的效果)

di2.png

# 方式二
import cv2
import numpy
def get_water2(): src = cv2.imread('yuan.png')
mask = cv2.imread('di2.png')
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('result2.jpg', save) get_water2()

  不多说直接,上效果图

  这两种方式,是相对来说效果很好的去除水印方式,也就是”人工”去除水印,但是该两种方式并不能满足我的要求,我需要大批量,高效率的去除水印,等我下一篇文章再来分享吧(容我在研究研究,哈哈)

python 利用opencv去除图片水印的更多相关文章

  1. python利用opencv去除水印方法

    OpenCV(Open Source Computer Vision Library)是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法 在python中可以利用opencv来去除 ...

  2. 用 Python 和 OpenCV 检测图片上的条形码

      用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...

  3. 用 Python 和 OpenCV 检测图片上的条形码(转载)

    原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...

  4. 利用canvas添加图片水印--直接上代码

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. python利用opencv合成模糊图像

    之前需要评估图像质量来筛选成像质量不错的图片,去除由于对焦,运动等造成的模糊图像,所以在构建数据集的时候考虑用opencv对清晰的图片进行处理获得模糊的图片从而进行训练. 1) 运动模糊图像 一般来说 ...

  6. C# 处理PPT水印(二)——去除水印效果(文本水印、图片水印)

    本文将对C#处理PPT幻灯片中的水印进一步说明和介绍.在C# 处理PPT水印(一)一文中,分享了如何插入水印效果的方法,包括插入文字水印效果.插入图片作为水印效果两种情况,那对于不需要水印效果的情况, ...

  7. 用Python去除PDF水印

    今天介绍下用 Python 去除 PDF (图片)的水印.思路很简单,代码也很简洁. 首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面. 这张图片是前几天整理<数据 ...

  8. BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路

    BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...

  9. Android OpenCV实现图片叠加,水印

    关于如何用纯OpenCV实现图片叠加的例子实在是太少,太多的是使用 C++,JNI实现的,如果要用C++的话,我们为啥不转行做C++ 下面的例子基于 Android JavaCV 实现了在im_bea ...

随机推荐

  1. 公钥基础设施PKI利用SRAM物理不可克隆函数PUF实现芯片标识唯一性

    下面给出PKI利用SRAM PUF实现芯片标识唯一性的方法思路: PKI利用SRAM PUF实现芯片标识唯一性的方式 (1)使用PUF原因 物理上不可克隆函数利用硅制造的自然变化来产生每个芯片统计上唯 ...

  2. MySQL数据库插入数据出现 ERROR 1526 (HY000): Table has no partition for value xxx

    MySQL数据库插入数据出现ERROR 1526 (HY000): Table has no partition for value xxx工作的时候发现无法插入数据,报错:ERROR 1526 (H ...

  3. POJ-2253(最短路变形+dijikstra算法+求解所有路径中所有最长边中的一个最小值)

    frogger POJ-2253 这题的代码特别像prim求解最小生成树的代码,其实两者本来也很像. 这里的d数组不再维护的起点到该点的最短距离了,而是路径中的最长距离. #include<io ...

  4. js 浮点运算bug

    js几个浮点运算的bug,比如6.9-1.1,7*0.8,2.1/0.3,2.2+2.1 实现思路 通过将浮点数放大倍数到整型(最后再除以相应倍数),再进行运算操作,这样就能得到正确的结果了 比如:1 ...

  5. Maven基础&&Spring框架阶段常用工具类整理

    常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...

  6. BZOJ_2243 [SDOI2011]染色 【树链剖分+线段树】

    一 题目 [SDOI2011]染色 二 分析 感觉树链剖分的这些题真的蛮考验码力的,自己的码力还是不够啊!o(╯□╰)o 还是比较常规的树链剖分,但是一定记得这里的线段树在查询的时候一定要考虑链于链相 ...

  7. Linux Python2 升级到 Python3

    国内企业服务器用 CentOS 系统的比较多,CentOS8 系统已经将系统默认 Python 版本调整为了 Python3,但是 CentOS7 的存量还是很大,毕竟对企业生产服务来说稳定大于一切, ...

  8. 攻防世界 reverse 进阶5-7

    5.re-for-50-plz-50  tu-ctf-2016 流程很简单,异或比较 1 x=list('cbtcqLUBChERV[[Nh@_X^D]X_YPV[CJ') 2 y=0x37 3 z= ...

  9. 基于react hooks,zarm组件库配置开发h5表单页面

    最近使用React Hooks结合zarm组件库,基于js对象配置方式开发了大量的h5表单页面.大家都知道h5表单功能无非就是表单数据的收集,验证,提交,回显编辑,通常排列方式也是自上向下一行一列的方 ...

  10. 问题笔记 - element表格 操作状态值

    1.必须从传到表里的数据源中取值(scope.row.star)