
本文主要讲述了在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:适合半透明水印,全自动处理。


暂无评论