簡體   English   中英

如何使用 Python 和 openCV 從圖像中去除透明水印

[英]How to remove transparent watermark from image using Python and openCV

以下是我處理的圖像示例:

例子1

例子2

我已經在 Stackoverflow 上找到了一些類似問題的解決方案( 這是與我最相似的情況),並且總是有一個使用閾值的簡單解決方案。 我從這些答案中嘗試了一些解決方案,但還沒有得到正確的結果。 我認為這里的問題是我的圖像不是掃描的紙頁而是照片。

有什么方法可以從我的圖像中去除水印而不丟失任何重要文本? (結果圖像可以是灰度的)

如果您沒有原始水印圖像,那么這里是一種使用除法歸一化(將圖像的模糊副本除以原始圖像)減輕 Python/OpenCV 中水印的方法。 它還可以使背景變白。

輸入 1:

在此處輸入圖片說明

輸入 2:

在此處輸入圖片說明

import cv2
import numpy as np
import skimage.exposure as exposure
import skimage.filters as filters

# read the image
img1 = cv2.imread('watermark1.jpg')
img2 = cv2.imread('watermark2.jpg')

# convert to gray
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

# blur
smooth1 = cv2.GaussianBlur(gray1, (5,5), 0)
smooth2 = cv2.GaussianBlur(gray2, (5,5), 0)

# divide gray by morphology image
division1 = cv2.divide(gray1, smooth1, scale=255)
division2 = cv2.divide(gray2, smooth2, scale=255)

# sharpen using unsharp masking
sharp1 = filters.unsharp_mask(division1, radius=3, amount=7, multichannel=False, preserve_range=False)
sharp1 = (255*sharp1).clip(0,255).astype(np.uint8)
sharp2 = filters.unsharp_mask(division2, radius=3, amount=9, multichannel=False, preserve_range=False)
sharp2 = (255*sharp2).clip(0,255).astype(np.uint8)

# save results
cv2.imwrite('watermark1_division_sharp.jpg',sharp1)
cv2.imwrite('watermark2_division_sharp.jpg',sharp2)

# show results
cv2.imshow('sharp1', sharp1)  
cv2.imshow('sharp2', sharp2)  
cv2.waitKey(0)
cv2.destroyAllWindows()

結果 1:

在此處輸入圖片說明

結果 2:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM