AI壁纸创作革命:用DeepSeek+Python全自动去除图片水印

——附可商用级代码与多方案效果对比


一、痛点觉醒:被水印支配的AI创作者

作为日均产出300+AI壁纸的创作者,豆包生成的固定位置水印(右下角半透明Logo+文字)导致:

  1. 单日浪费2.7小时手动PS修补
  2. 不同尺寸壁纸需反复调整修补区域
  3. 传统去水印工具破坏画面纹理

核心诉求

  • 批量识别/去除固定格式水印
  • 智能修复被覆盖的原始背景
  • 支持1920x1080至8K分辨率自适应

二、DeepSeek生成基础框架

Prompt输入

"用Python编写批量去水印脚本:

自动识别图片右下角300x100区域使用OpenCV修复算法去除半透明水印保留原始画质并批量输出"

DeepSeek生成初版代码

import cv2
import os
import numpy as np

def remove_watermark(img_path, output_dir):
    img = cv2.imread(img_path)
    height, width = img.shape[:2]
    
    # 定义水印区域(右下角300x100)
    y_start = height - 100
    x_start = width - 300
    watermark_roi = img[y_start:height, x_start:width]
    
    # 创建修复蒙版
    mask = np.zeros(watermark_roi.shape[:2], np.uint8)
    mask[10:-10, 10:-10] = 255  # 保留边缘过渡
    
    # 使用inpaint算法修复
    repaired = cv2.inpaint(watermark_roi, mask, 3, cv2.INPAINT_TELEA)
    
    # 替换原区域
    img[y_start:height, x_start:width] = repaired
    cv2.imwrite(os.path.join(output_dir, os.path.basename(img_path)), img)

if __name__ == "__main__":
    input_dir = "watermarked"
    output_dir = "cleaned"
    os.makedirs(output_dir, exist_ok=True)
    
    for file in os.listdir(input_dir):
        if file.lower().endswith(('.png', '.jpg')):
            remove_watermark(os.path.join(input_dir, file), output_dir)

三、深度调优:与DeepSeek的攻防实战

问题1:半透明水印残留

现象:修复区域出现明显拼接痕迹
优化方案

  1. 多算法融合:结合边缘感知滤波与纹理合成
  2. 向DeepSeek提问
  3. “如何提升半透明水印的修复效果?”

DeepSeek建议代码升级

# 新增边缘保护处理
def edge_aware_filter(roi):
    gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
    edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                 cv2.THRESH_BINARY, 3, 2)
    # 联合双边滤波
    return cv2.ximgproc.jointBilateralFilter(roi, edges, 15, 75, 75)

# 修改修复逻辑
repaired = edge_aware_filter(repaired)

问题2:动态分辨率适配

现象:4K壁纸水印区域比例失调
解决方案

# 智能计算水印区域占比
def calc_watermark_area(width, height):
    return (int(width * 0.2), int(height * 0.1))  # 宽度20%,高度10%

四、工业级最终代码(支持多分辨率/多进程)

import cv2
import os
import numpy as np
from multiprocessing import Pool
from tqdm import tqdm

class WatermarkRemover:
    def __init__(self, edge_sigma=75, process_num=4):
        self.edge_sigma = edge_sigma
        self.process_num = process_num

    def _edge_aware_filter(self, roi):
        """边缘感知滤波"""
        gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
        edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                    cv2.THRESH_BINARY, 3, 2)
        return cv2.ximgproc.jointBilateralFilter(roi, edges, 15, 
                                               self.edge_sigma, self.edge_sigma)

    def _inpaint_region(self, img):
        """核心修复逻辑"""
        h, w = img.shape[:2]
        w_w, w_h = int(w*0.2), int(h*0.1)  # 动态计算区域
        
        # 渐变蒙版生成
        mask = np.zeros((w_h, w_w), dtype=np.uint8)
        cv2.rectangle(mask, (15,15), (w_w-15, w_h-15), 255, -1)
        mask = cv2.GaussianBlur(mask, (51,51), 0)
        
        roi = img[-w_h:, -w_w:]
        repaired = cv2.inpaint(roi, mask, 3, cv2.INPAINT_NS)
        return self._edge_aware_filter(repaired)

    def process_image(self, args):
        """供多进程调用的处理方法"""
        path, output_dir = args
        try:
            img = cv2.imread(path)
            repaired_roi = self._inpaint_region(img)
            img[-repaired_roi.shape[0]:, -repaired_roi.shape[1]:] = repaired_roi
            cv2.imwrite(os.path.join(output_dir, os.path.basename(path)), img,
                       [int(cv2.IMWRITE_JPEG_QUALITY), 95])
            return True
        except Exception as e:
            print(f"处理失败: {path} - {str(e)}")
            return False

if __name__ == "__main__":
    input_dir = "壁纸源文件"  #路径和文件名都不能有中文,不然会出现无法读取图片异常
    output_dir = "无水印壁纸"
    os.makedirs(output_dir, exist_ok=True)
    
    remover = WatermarkRemover(edge_sigma=80)
    task_list = [(os.path.join(input_dir, f), output_dir) 
                for f in os.listdir(input_dir) if f.lower().endswith(('.png', '.jpg'))]
    
    # 多进程加速
    with Pool(processes=4) as pool:
        results = list(tqdm(pool.imap(remover.process_image, task_list), total=len(task_list)))
    
    print(f"成功处理 {sum(results)} 张图片")


五、效果实测与方案对比

测试环境

  • Intel i7 + RTX 3060
  • 100张4K壁纸(含动态/渐变/纹理背景)

方案

耗时

残影程度

纹理连贯性

手动PS修补

217m

★★★☆☆

★★★★☆

初版inpaint

6.2m

★★☆☆☆

★★★☆☆

本方案(优化版)

8.7m

★★★★☆

★★★★☆


六、进阶技巧与法律边界

  1. 参数调优指南
  2. edge_sigma:控制纹理保留强度(50-100)
  3. 修改calc_watermark_area调整检测区域
  4. 法律警示
  5. 本代码仅适用于去除自主生成内容的水印
  6. 严禁用于去除他人版权内容水印
  7. 扩展方向
  8. 接入Stable Diffusion进行背景重绘
  9. 训练YOLO模型识别非固定位置水印

立即运行

pip install opencv-python tqdm numpy

(建议在Linux/Mac环境运行,Windows需配置OpenCV多线程支持)

相关文章

Python视频去水印方法总结

去除视频水印是一个复杂的过程,通常需要结合图像处理和计算机视觉技术。以下是几种常见方法及对应的Python实现思路,但请注意:去除他人版权水印可能涉及法律风险,请确保你有权处理目标视频。方法一:覆盖/...

用 Python 去除 PDF 水印,你学会吗?

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

超简单!为图片和 PDF 上去掉水印

作者:某某白米饭来源:Python 技术网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读。比如下面的图片就是在 pdf 文件上截取出来的。安装模块PIL:Python Imaging Lib...

使用Python给文件添加防伪水印?

防伪水印大家都不陌生,添加防伪水印的主要目的是保护文件的真实性和所有权,防止未经授权的复制、篡改和使用。下面我们就来看看通过Python如何实现为文件添加防伪水印的操作。使用Python添加防伪水印到...

python如何给图片添加文字水印?

方法:方法简单粗暴,打开图片然后在合适的位置绘制文字,最后保存。python可以使用PIL库来操作图片,不过据说PIL不支持python3,使用pillow作为替代。安装pillow: pip ins...