# ============================================
# ## OpenCV去水印原理:
#
# 1. 确认图像的大小
# 2. 创建一个和图像尺寸一样大的纯黑色图像,也就是掩码mask
# 3. 确认水印的位置,也就是水印的起始点坐标(x, y)和水印的宽高w, h
# 4. 在掩码mask中,找到和水印同样的位置,也就是(x, y), (x + w, y + h)区域画出一个白色矩形
# 5. 调用cv2.inpaint()方法自动去水印
# ============================================# ============================================
# ## cv2.inpaint():
#
# result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
# ### ↑ ↑ ↑ ↑
# ### 图片 掩码 修复半径 修复算法
#
# result就是去水印后的结果图片
# ============================================# ============================================
# ## 参数含义:
#
# img:要去水印的图片
# mask:掩码
# 3:修复半径,从水印边缘往外找多少像素来填充,一般用 3-5 就够了
# cv2.INPAINT_TELEA:修复算法,有cv2.INPAINT_TELEA和cv2.INPAINT_NS
# ============================================import cv2
import numpy as npimg = cv2.imread('frame_000000.jpg')# 获取图片的尺寸:高、宽
img_shape = img.shape[:2]# 创建和图像大小一致的掩码mask,纯黑图
mask = np.zeros(img_shape, np.uint8)# 水印的位置
# 这里是直接给出水印的起始点坐标和宽高,有时候是需要通过其他方式来获取的
x = 834
y = 18
w = 100
h = 40# 在掩码中,和水印重叠的位置,画一个矩形并填充白色
cv2.rectangle(mask, (x, y), (x + w, y + h), 255, -1)# 调用inpaint()方法去水印
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)# 保存去水印后的图
cv2.imwrite("result.jpg", result)
去水印前:

去水印后:

