从某网站下载了一个pdf,被打上了水印, 看起来很不舒服

找到水印的灰度区间
img = plt.imread(path)
img = img[:,:,1]
plt.hist(img.ravel(), 256, [1,254])

看出大概在 【225,240】附近
分割水印
plt.figure()
plt.subplot(1,3,1)
plt.axis('off')
plt.imshow(img,cmap='gray')
lower = 225
upper = 240
mask = cv2.inRange(img, lower, upper)
mask = cv2.medianBlur(mask,3)
mask = cv2.medianBlur(mask,3)
plt.subplot(1,3,2)
plt.axis('off')
plt.imshow(mask,cmap='gray')
img = np.require(img, dtype='f4', requirements=['O', 'W'])
img.flags.writeable = True
img[mask==255]=255
plt.subplot(1,3,3)
plt.axis('off')
plt.imshow(img,cmap='gray')
plt.show()

上图左中右分别为:原图,水印,除水印后。
上面的方法太傻了哈哈哈
直接二值化
ret,th = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

ok
再来一次腐蚀膨胀
img = cv2.resize(img, (scale*img.shape[1],scale*img.shape[0]), interpolation=cv2.INTER_CUBIC)
#OpenCV定义的结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
#腐蚀图像
eroded = cv2.erode(img,kernel)
#膨胀图像
dilated = cv2.dilate(eroded,kernel)
img = dilated
img = cv2.resize(img, (int(img.shape[1]/scale),int(img.shape[0]/scale)), interpolation=cv2.INTER_LINEAR)


1万+





