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()代码运行效果:
此类算法比较适合单一位置的黑白水印,而且需要提供一张水印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)代码运行效果:
三、人工智能训练去除法
下载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 [水印图像文件夹]
效果如下:
github地址:https://github.com/whitelok/watermark-remover
该方法需要对水印和图片进行训练,然后才能自动去除图片的水印。
网友评论0