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)
常見的參考表,純色下特別有效,漸變的不好弄。