去除水印而不破坏原图需要根据水印类型和强度进行针对性处理。以下是几种常见的技术方案及代码示例:
- 基于深度学习的智能去水印(推荐方案)
```python
import cv2
import numpy as np
from tensorflow.keras.applications import VGG16
from tensorflow.keras.preprocessing import image
def ai_watermark_removal(input_path, output_path):
加载预训练模型
model = VGG16(weights='imagenet', include_top=False, input_shape=(224,224,3))
- 传统图像处理方案(适用于简单水印)
```python
import cv2
def simple_removal(input_path, output_path):
读取图像
img = cv2.imread(input_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
高斯模糊(适用于半透明水印)blurred = cv2.GaussianBlur(gray, (25,25), 0)
非锐化掩模(适用于文字水印)
mask = cv2.bitwise_not(cv2.adaptiveThreshold(blurred, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2))
运动模糊(适用于横向水印)
kernel = np.array([[0,1,0],[1,0,1],[0,1,0]], dtype=np.float32)
blurred = cv2.filter2D(blurred, -1, kernel)
合成输出
result = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite(output_path, result)
simple_removal('input.jpg', 'output.jpg')
```
- AI增强方案(需要预训练模型)
```python
from DeepAI import DeepAI
def ai_removal(input_path):
api_key = 'your_api_key'
client = DeepAI(api_key)
response = client.image.remove_watermark({'image': {
'file': open(input_path, 'rb'),
'type': 'image/jpeg'