matlab去除图片水印_python 利用opencv去除图片水印

点击上方“Python技术之巅”,马上关注

真爱,请置顶或星标

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

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

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

1571fbe4dc08ab8959157630dcc14654.png

第一种方法:

  该方法看着是不是很简单?没错就这么几行代码:

import cv2def 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()

但是这种方式需要一个美工,让他配合你做一张di.png:

46fd140076dbf5ab58fe02073e359b5a.png

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

e98a29a4cc8a13e4b7d45946680ed1f4.png

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

第二种方式:

  还是以上一张图片为例,这种方式还是需要美工配合,只是图片变了,di2.png如下:

104bd3bd6eb1bcc3adffcd85073656a2.png

同时换了一种算法模式,但是注意该方法效率不高,使用该图片时跑一次代码就行了,但是若是别的图片,你可能需要跑几遍代码之后,才能出现最终效果(若你发现采用该方式去除水印,发现去除后的效果,只是水印颜色变淡了,那么请你在对处理过的图,再次执行该代码,如此多次之后,请用肉眼识别最好的效果)

import cv2import 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 = 0else:
                    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()

不多说直接,上效果图

0bb5995f5330781bed571bfdd69f099b.png

这两种方式,是相对来说效果很好的去除水印方式,也就是”人工”去除水印。

本文作者:luckly,原文链接:https://www.cnblogs.com/yaoxiaofeng/p/11188557.html

557ac9b3b75a4a6e9e3c80424273767e.png

 推荐阅读

python面试题37道(附答案)看完面试不愁了

python爬取拉勾网数据并进行数据可视化

Python中的内存管理机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值