去除水印的三种实用方法

本文主要讲述了在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:改颜色范围就能去掉彩色水印。

方法 2:改坐标就能去掉固定位置水印。

方法 3:适合半透明水印,全自动处理。

评论 (0)

暂无评论