python 利用opencv去除圖片水印


python 去除水印“人工”智能去除水印

  這兩天公司來了一個新的需求——去除水印,對於我一個從未接觸過的這種事情的人來說,當時我是蒙的。不過首先我就去搜索了一下是否有該種合適的功能模塊,經過我的篩選,發現opencv應該是最有滿足我這個需求可能的模塊了。

我先把我的測試例子放上來。

測試圖片(你可能在別處看到過,沒錯就是你看到過的那個例子圖)

第一種方法:

  該方法看着是不是很簡單?沒錯就這么幾行代碼,但是這種方式需要一個美工,讓他配合你做一張di.png

di.png

# 方式一
import cv2

def get_water():
    # 黑底白字
    src = cv2.imread('yuan.png')  # 默認的彩色圖(IMREAD_COLOR)方式讀入原始圖像
    # black.jpg
    mask = cv2.imread('di.png', cv2.IMREAD_GRAYSCALE)  # 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
    # 參數:目標修復圖像; 蒙版圖(定位修復區域); 選取鄰域半徑; 修復算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果較好)
    dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS)

    cv2.imwrite('result1.jpg', dst)

get_water()

   看完上面這么多廢話,其實你就想看看效果如何,那么來看一下該方式效果圖

  是不是想說效果很差,其實在我所測試使用的方法中,這種方法已經算是效果不錯的了。別着急走,下面還有一種比這效果更好的方式

第二種方式:

  還是以上一張圖片為例,這種方式還是需要美工配合,只是圖片變了,同時換了一種算法模式,但是注意該方法效率不高,使用該圖片時

跑一次代碼就行了,但是若是別的圖片,你可能需要跑幾遍代碼之后,才能出現最終效果(若你發現采用該方式去除水印,發現去除后的效果,

只是水印顏色變淡了,那么請你在對處理過的圖,再次執行該代碼,如此多次之后,請用肉眼識別最好的效果)

di2.png

 

# 方式二
import cv2
import numpy
def get_water2():

    src = cv2.imread('yuan.png')
    mask = cv2.imread('di2.png')
    save = numpy.zeros(src.shape, numpy.uint8)  # 創建一張空圖像用於保存

    for row in range(src.shape[0]):
        for col in range(src.shape[1]):
            for channel in range(src.shape[2]):
                if mask[row, col, channel] == 0:
                    val = 0
                else:
                    reverse_val = 255 - src[row, col, channel]
                    val = 255 - reverse_val * 256 / mask[row, col, channel]
                    if val < 0: val = 0

                save[row, col, channel] = val

    cv2.imwrite('result2.jpg', save)

get_water2()

  不多說直接,上效果圖

  這兩種方式,是相對來說效果很好的去除水印方式,也就是”人工”去除水印,但是該兩種方式並不能滿足我的要求,我需要大批量,高效率的去除水印,等我下一篇文章再來分享吧(容我在研究研究,哈哈)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM