import cv2 as cv import numpy as np class WaterMark: def Test(self, path): img = cv.imread(path) roi = img[980:1000, 0:137] # 用画图打开,先高范围后宽宽范围 cv.imwrite('02.jpg', roi) roi_hsv = cv.cvtColor(roi, cv.COLOR_BGR2HSV) cv.imwrite('hsv.jpg', roi_hsv) #转成hsv格式 # 通用黑色,最需要调参的范围 # lower = np.array([0, 0, 0]) # H,S, V # upper = np.array([180, 80, 220]) # 黑白分明的黑色水印 # lower = np.array([0, 0, 0]) # H(色调),S(饱和度), V (亮度) 对于白底黑色水印,v可以略微调大,亮度调低 # upper = np.array([0, 0, 240]) lower = np.array([0, 0, 0]) # H,S, V upper = np.array([180, 72, 220]) # 创建水印蒙层 kernel = np.ones((3, 3), np.uint8) print(kernel) cv.imwrite('kernel.jpg', kernel) mask = cv.inRange(roi_hsv, lower, upper) #将这个范围内的变成白,这个范围外的变成黑,关注白色的范围大小 cv.imwrite(r'mask.jpg', mask) # 对水印蒙层进行膨胀操作 dilate = cv.dilate(mask, kernel, iterations=1) cv.imwrite('dilate.jpg', dilate) res = cv.inpaint(roi, dilate, 7, flags=cv.INPAINT_TELEA) cv.imwrite('res.jpg', res) img[980:1000, 0:137] = res cv.imwrite('modified.jpg', img) if __name__ == '__main__': path = 'C:/Users/Administrator/Desktop/ditan.jpg' w = WaterMark() w.Test(path)
常见的参考表,纯色下特别有效,渐变的不好弄。