去除水印的三种实用方法

14人浏览 / 0人评论 / 添加收藏
本文主要讲述了在opencv中去除图像水印的三种方法。
首先要安装好python环境和依赖的lib库。
pip install opencv-python numpy
 

方法 1:简单纯色 / 浅色水印(阈值 + 修复)

适合:水印颜色单一、背景简单

import cv2
import numpy as np

# 1. 读取图片
img = cv2.imread("watermark.jpg")

# 2. 提取水印区域(创建蒙版)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 根据水印颜色调整范围(蓝色水印示例)
lower = np.array([90, 50, 50])
upper = np.array([130, 255, 255])
mask = cv2.inRange(hsv, lower, upper)

# 3. 图像修复(核心)
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)

# 保存结果
cv2.imwrite("result.jpg", result)

方法 2:指定区域去水印(最常用)

适合:水印固定在角落 / 固定位置

import cv2
import numpy as np

img = cv2.imread("watermark.jpg")

# 手动框选水印区域 (x, y, w, h)
x, y, w, h = 50, 50, 200, 80  # 根据你的图片修改
roi = img[y:y+h, x:x+w]

# 创建蒙版
mask = np.zeros(img.shape[:2], dtype=np.uint8)
mask[y:y+h, x:x+w] = 255

# 修复
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)

cv2.imwrite("result.jpg", result)

方法 3:半透明 / 淡入水印(频域去水印)

适合:图片上的半透明水印、文字水印、Logo 水印(效果最好)

import cv2
import numpy as np

def remove_watermark(img_path):
   img = cv2.imread(img_path, 0)
   
   # 傅里叶变换
   fft = np.fft.fft2(img)
   fft_shift = np.fft.fftshift(fft)
   
   # 屏蔽水印高频区域
   rows, cols = img.shape
   crow, ccol = rows // 2, cols // 2
   fft_shift[crow-10:crow+10, ccol-10:ccol+10] = 0
   
   # 逆变换
   ifft_shift = np.fft.ifftshift(fft_shift)
   ifft = np.fft.ifft2(ifft_shift)
   result = 255 * np.abs(ifft)
   result = result.astype(np.uint8)
   
   return result

# 使用
img = remove_watermark("watermark.jpg")
cv2.imwrite("result.jpg", img)

快速使用说明

 
  1. 方法 1:改颜色范围就能去掉彩色水印
  2. 方法 2:改坐标就能去掉固定位置水印
  3. 方法 3:适合半透明水印,全自动处理

全部评论