目錄
- OpenCV + Numpy
- 函數簡介
- 色彩轉換
- PIL + itertools
由於圖片水印的種類有很多,今天我們先講最簡單的一種。
即上圖中的①類水印,這種水印存在白色背景上的文檔裡,水印是灰色,需要保留的文字是黑色。
這種通常可以進行簡單的亮度/對比度轉換,直到水印消失並降低亮度以進行補償[1]。參考別人的方法,我發現可以用多種方法去除水印。大致原理比較相似,下面先講OpenCV的方法。
OpenCV + Numpy
本方法需要使用的庫:cv2、numpy。cv2是基於OpenCV的圖像處理庫,可以對圖像進行腐蝕,膨脹等操作;Numpy這是一個強大的處理矩陣和維度運算的庫。
函數簡介
介紹一下cv2的三個基本函數:使用
img = cv2.imread('test.png') cv2.imshow('test.png',img) cv2.waitKey(0) cv2.imwrite('test_2.png', img)
對於Numpy呢,則要用到np.clip()
,它是一個截取函數,用於截取數組中小於或者大於某值的部分,並使得被截取部分等於固定值。
np.clip(a, a_min, a_max, out=None):
具體用法:
可以看到,數組x中的所有數限定到范圍0和5之間。為啥要介紹這些函數呢,接著往下看。
色彩轉換
回到本文一開始,我們想去除文檔圖片中的水印。
上圖中我选择瞭三個點,這三個像素點分別對應背景白色、黑色字體以及灰色的水印。
我們現在要做的事,就是想辦法把水印轉換成白色背景。換言之,就是把圖片中[217,217,217]的像素點轉換成[255,255,255]。
當然這個[217,217,217]也不是固定的,隻是一個范圍。為瞭方便調整,我选择瞭一些像素點,做瞭一個線性回歸。
希望把圖片整體的像素顏色做一個改變,原有黑色字體盡量跟原來一致,而水印部分則一定要≥255,然後就可以通過np.clip()
限定區間,使之都變成[255,255,255]。
說幹就幹
import cv2 import numpy as np img = cv2.imread('test.png') new = np.clip(1.4057577998008846*img-38.33089999653017, 0, 255).astype(np.uint8) cv2.imwrite('removed.png', new)
下面我們看看調整後的效果(左側是轉換前,右側是轉換後)。
左:轉換前 右:轉換後
處理效果還是不錯的,說明對於這類文檔圖片水印,通過幾行Python程式碼就可以輕松去除水印。
不過通過線性回歸改變整體圖片顏色,也會影響原有的黑色文本,導致其顏色發生瞭微微變化。
那我們能不能簡單粗暴一點!隻改變水印的顏色呢?
也可以試試。
PIL + itertools
PIL也是一個Python 圖像處理庫,其中Image模塊是在Python PIL圖像處理中常見的模塊,對圖像進行基礎操作的功能基本都包含於此模塊內。
itertools
之前更是被我們稱為一個零差評的Python內置庫。其中itertools.product
用來產生多個列表和迭代器的(積)。
還是跟之前一個原理,我們希望將圖片中[217,217,217]的像素點轉換成[255,255,255]。
那就簡單粗暴一點,也就是像素值相加大概600(217+217+217)以上的像素點,都改成[255,255,255]就好瞭。
from itertools import product from PIL import Image img = Image.open('test.png') width, height = img.size for pos in product(range(width), range(height)): if sum(img.getpixel(pos)[:3]) > 600: img.putpixel(pos, (255,255,255)) img.save('removed_1.png')
運行結果,對比一下。
左:轉換前 右:轉換後
與第一種方法對比,肉眼也沒看出來太明顯差別。
那大傢就喜歡那種方法就用哪個吧!
到此這篇關於運用python去除圖片水印的文章就介紹到這瞭,更多相關python去除圖片水印內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支援!
You may also like
相关贴文:
近期文章
- BOOM 與 SHOPIFY REBELLION – 第 2 場 – 觀看阿梅爾酋長和 KOKZ 的派對!
- 使用 PagePilot 作為實現此目的的捷徑! #dropshipping #shopify #ecommerce #ai
- SHOPIFY REBELLON vs BOOM ESPORT [BO2] – TIMADO, YOPAJ 對上 JACKKY, MAC – ESL ONE BANGKOK 2024 DOTA 2
- Dota2 – Team Spirit VS Shopify Rebellion – ESL One 曼谷
- 德國滑雪選手如何打造 Shopify?
- 2024 年 12 月 2 款必銷產品🚀(Shopify 得獎者)
- Shopify Rebellon vs 獵鷹隊 [BO2] – TIMADO, YOPAJ 對 SKITER, AMMAR – ESL ONE BANGKOK 2024 DOTA 2
- 添加這些直銷產品並觀察您的銷售爆炸式增長#dropshipping #shopify
- 我如何在 19 歲時開始在 30 天內從巴基斯坦開始 Shopify Dropshipping 從 0 美元到 1000 美元
發佈留言