python去除图片水印的三种方法

python去除图片水印的三种方法

python去除图片水印的三种方法

图片水印在为了保护图片版权采取的一种技术保护方式,在现实网页app中比较常见,那么去除水印在ps中也很简单,网上的教程五花八门,那么怎么样采用编程的方式来批量除去大量的水印图片呢?今天我们来介绍使用python来去除图片的水印,有三种方式

一、cv2.inpaint目标修复

我们采用opencv的inpatint来进行目标修复,选取一张水印的黑色背景底图和有水印的图片,通过INPAINT_TELEA/INPAINT_NS修复算来来去除水印,示例代码如下:

#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
import cv2

def get_water():
    # 黑底白字
    src = cv2.imread('/data/wwwroot/default/asset/waterdemo.png')  # 默认的彩色图(IMREAD_COLOR)方式读入原始图像
    print("有水印的图片<img  width=300 src='/asset/waterdemo.png' />")
    # black.jpg
    mask = cv2.imread('/data/wwwroot/default/asset/waterlogo.png', cv2.IMREAD_GRAYSCALE)  # 灰度图(IMREAD_GRAYSCALE)方式读入水印蒙版图像
    # 参数:目标修复图像; 蒙版图(定位修复区域); 选取邻域半径; 修复算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果较好)
    dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS)
    print("水印logo底色图片<img width=300 src='/asset/waterlogo.png' />")
 
    cv2.imwrite('/data/wwwroot/default/Data/result13.png', dst)
    print("去除水印后的照片<img width=300 src='/Data/result13.png' />")
 
get_water()
		

代码运行效果:

python去除图片水印的三种方法

此类算法比较适合单一位置的黑白水印,而且需要提供一张水印logo的底图。

二、cv2 alpha beta计算去除

通过对图片的alpha值的更改增加beta值来去除水印,比较适合文字类,代码如下:

import cv2
import numpy as np

img = cv2.imread("/data/wwwroot/default/asset/veidz.jpg")
print("有水印的图片<img width=300  src='/asset/veidz.jpg' />")
alpha = 2.0
beta = -160

new = alpha * img + beta
new = np.clip(new, 0, 255).astype(np.uint8)
cv2.imwrite('/data/wwwroot/default/Data/12313.png', new)
print("去水印后的图片<img width=300  src='/Data/12313.png' />")
#cv2.imwrite("cleaned.png", new)

代码运行效果:

python去除图片水印的三种方法

三、人工智能训练去除法

下载docker镜像

docker pull whitelok/watermark-remover:v1.0

cd watermark-remover; pip3 install -r requirements.txt

bash train.sh 用于训练结果文件夹中的水印和 alpha 保存并从原始图像中删除水印。

如果无水印效果不够好,可以更改--iters(参考train.sh)
如果训练过程等待时间太长,可以改--watermark_threshold(参考train.sh)
如果你得到 tk_inter 错误,你可以改变--save_result(参考 train.sh)

将所有带水印的图片放入一个文件夹

python3 main_solver.pyc --path [水印图像文件夹]

效果如下:

python去除图片水印的三种方法

github地址:https://github.com/whitelok/watermark-remover

该方法需要对水印和图片进行训练,然后才能自动去除图片的水印。

{{collectdata}}

网友评论0