Python OpenCV去除图片水印

问题描述

去除百度水印



数据

1.jpg
背景简单
在这里插入图片描述
2.jpg
背景复杂
在这里插入图片描述




方法一、OpenCV提取颜色后填充

代码

RGB取值范围为0-255
HSV取值范围为H:0-180, S: 0-255, V: 0-255

import cv2
import numpy as np

# 读取图片
img = '1.jpg'
img = cv2.imread(img)
cv2.imshow('original', img)

# 选择ROI
roi = cv2.selectROI(windowName="original", img=img, showCrosshair=True, fromCenter=False)
x, y, w, h = roi
print(roi)
roi = img[y:y + h, x:x + w]
cv2.imshow('1', roi)

# 处理蓝色
lowerb = np.array([100, 25, 35])  # 蓝色下限
upperb = np.array([125, 255, 255])  # 蓝色上限
roi_hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)  # BGR转HSV,处理更精确
mask_blue = cv2.inRange(roi_hsv, lowerb, upperb)  # 蒙版
kernel = np.ones((3, 3), np.uint8)  # 卷积核
mask_blue = cv2.dilate(mask_blue, kernel, iterations=1)  # 膨胀
roi = cv2.inpaint(roi, mask_blue, 5, flags=cv2.INPAINT_TELEA)  # 重绘
cv2.imshow('2', roi)

# 处理红色
lowerb = np.array([0, 5, 1])
upperb = np.array([225, 255, 255])
roi_hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask_red = cv2.inRange(roi_hsv, lowerb, upperb)
mask_red = cv2.dilate(mask_red, kernel, iterations=1)
roi = cv2.inpaint(roi, mask_red, 5, flags=cv2.INPAINT_TELEA)
cv2.imshow('3', roi)

# 重新填充
img[y:y + h, x:x + w] = roi
cv2.imshow('after', img)

# 退出
cv2.waitKey(0)
cv2.destroyAllWindows()

结果

在这里插入图片描述

在这里插入图片描述
优点:原理简单
缺点:背景复杂不适用,且需要手动调颜色上下限
适用:背景简单且为纯色




参考文献

  1. Python OpenCV裁剪并保存图片
  2. 用python+OpenCV去除图片水印
  3. 两种Python基于OpenCV的固定位置半透明水印去除方案
  4. Python与机器视觉(x)图像修复
  5. 如何利用深度学习技术处理图像水印?
  6. 写给普通人用的的深度学习去水印算法
  7. 使用深度学习去除复杂图像水印,效果好过photoshop!
发布了248 篇原创文章 · 获赞 89 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/lly1122334/article/details/104948273