批量去水印是個邪惡的技術,以老趙的衣櫥為例子就更邪惡了。之所以以衣櫥為例子而不以時尚網為例子,是標題需要。實際上,時尚網的水印批量去除效果更佳。閒話少說,擺原理,上圖片(程式碼就不上了)。
======================================
通過觀察可以發現,如果以圖片的右下角為基準,很多網站圖片的水印位置是固定的,因此,可以通過以下步驟去除:
第一步:制定一張mask圖片,這張圖片標記了水印的位置。
mask圖片可以用photoshop或其它工具做。我最初的想法是讓程式智慧提取,輸入兩張帶有水印的圖片,根據水印區域相似性來找到水印區。這個思路實現起來比較難,試了幾個方法,都不理想。還是用photoshop扣掉非水印區域省心。
下面是我做的“衣櫥”的mask圖片,其中非白色的畫素便是水印區:
第二步:對於要去水印的圖片,根據mask圖片,通過程式摳掉其中的水印區域。這一步可以省略,摳不摳都不影響最終結果。放在這裡是為了把原理講的更清晰些。經過第二步,我們得到了一張區域性殘缺的圖片。
第三步:圖片復原。圖片復原是一種影像處理技術,英文叫Image Inpainting。原理很複雜,網上的論文大把抓,有興趣的可以去看看。
我用的是OpenCV的影像復原函式。先看看OpenCV影像復原的演示,對這個技術有個直觀認識。這是一張殘缺的照片:
復原後的照片:
效果很棒。:P
我按上面思路寫了一個 demo,拿老趙的衣櫥做實驗,結果如下:
換張圖片試試:
再換張:
水印去掉了,復原後的圖片,仔細看,還能看出痕跡。mask模板再製作精良點,選擇更好的演算法估計效果會好一些。