欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python編程O(píng)penCV和Numpy圖像處理庫(kù)實(shí)現(xiàn)圖片去水印

 更新時(shí)間:2021年09月26日 14:22:13   作者:朱小五是凹凸君呀  
這篇文章主要介紹了Python編程中如何實(shí)現(xiàn)圖片去水印本文采用了OpenCV和Numpy的圖像處理的方法來(lái)實(shí)現(xiàn),文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下

大家好,我是小五

前一陣給大家分享了,Python如何給圖片加水印。評(píng)論區(qū)就有小伙伴問(wèn),可不可使用Python去除圖片水印的方法呢?

這個(gè)肯定有啊,不過(guò)由于圖片水印的種類(lèi)有很多,今天我們先講最簡(jiǎn)單的一種。

即上圖中的①類(lèi)水印,這種水印存在白色背景上的文檔里,水印是灰色,需要保留的文字是黑色。

這種通常可以進(jìn)行簡(jiǎn)單的亮度/對(duì)比度轉(zhuǎn)換,直到水印消失并降低亮度以進(jìn)行補(bǔ)償。

參考別人的方法,我發(fā)現(xiàn)可以用多種方法去除水印。大致原理比較相似,下面先講OpenCV的方法。

OpenCV + Numpy

本方法需要使用的庫(kù):cv2、numpy。cv2是基于OpenCV的圖像處理庫(kù),可以對(duì)圖像進(jìn)行腐蝕,膨脹等操作;Numpy這是一個(gè)強(qiáng)大的處理矩陣和維度運(yùn)算的庫(kù)。

函數(shù)簡(jiǎn)介

介紹一下cv2的三個(gè)基本函數(shù):使用cv2.imread()cv2.imshow(),cv2.imwrite()分別可以讀取、顯示和保存圖像。

img = cv2.imread('test.png')
cv2.imshow('test.png',img)
cv2.waitKey(0)
cv2.imwrite('test_2.png', img)

對(duì)于Numpy呢,則要用到np.clip(),它是一個(gè)截取函數(shù),用于截取數(shù)組中小于或者大于某值的部分,并使得被截取部分等于固定值。

np.clip(a, a_min, a_max, out=None):

具體用法:

可以看到,數(shù)組x中的所有數(shù)限定到范圍0和5之間。為啥要介紹這些函數(shù)呢,接著往下看。

色彩轉(zhuǎn)換

回到本文一開(kāi)始,我們想去除文檔圖片中的水印。

上圖中我選取了三個(gè)點(diǎn),這三個(gè)像素點(diǎn)分別對(duì)應(yīng)背景白色、黑色字體以及灰色的水印。

我們現(xiàn)在要做的事,就是想辦法把水印轉(zhuǎn)換成白色背景。換言之,就是把圖片中[217,217,217]的像素點(diǎn)轉(zhuǎn)換成[255,255,255]。

當(dāng)然這個(gè)[217,217,217]也不是固定的,只是一個(gè)范圍。為了方便調(diào)整,我選取了一些像素點(diǎn),做了一個(gè)線性回歸。

希望把圖片整體的像素顏色做一個(gè)改變,原有黑色字體盡量跟原來(lái)一致,而水印部分則一定要≥255,然后就可以通過(guò)np.clip()限定區(qū)間,使之都變成[255,255,255]。

說(shuō)干就干

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)

下面我們看看調(diào)整后的效果(左側(cè)是轉(zhuǎn)換前,右側(cè)是轉(zhuǎn)換后)。

左:轉(zhuǎn)換前 右:轉(zhuǎn)換后

處理效果還是不錯(cuò)的,說(shuō)明對(duì)于這類(lèi)文檔圖片水印,通過(guò)幾行Python代碼就可以輕松去除水印。

不過(guò)通過(guò)線性回歸改變整體圖片顏色,也會(huì)影響原有的黑色文本,導(dǎo)致其顏色發(fā)生了微微變化。

那我們能不能簡(jiǎn)單粗暴一點(diǎn)!只改變水印的顏色呢?

也可以試試。

PIL + itertools

PIL也是一個(gè)Python 圖像處理庫(kù),其中Image模塊是在Python PIL圖像處理中常見(jiàn)的模塊,對(duì)圖像進(jìn)行基礎(chǔ)操作的功能基本都包含于此模塊內(nèi)。

itertools 之前更是被我們稱(chēng)為一個(gè) 零差評(píng)的 Python 內(nèi)置庫(kù)。其中itertools.product用來(lái)產(chǎn)生多個(gè)列表和迭代器的(積)。

還是跟之前一個(gè)原理,我們希望將圖片中[217,217,217]的像素點(diǎn)轉(zhuǎn)換成[255,255,255]。

那就簡(jiǎn)單粗暴一點(diǎn),也就是像素值相加大概600(217+217+217)以上的像素點(diǎn),都改成[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')

運(yùn)行結(jié)果,對(duì)比一下。

左:轉(zhuǎn)換前 右:轉(zhuǎn)換后

與第一種方法對(duì)比,肉眼也沒(méi)看出來(lái)太明顯差別。

那大家就喜歡那種方法就用哪個(gè)吧!

以上就是Python編程O(píng)penCV和Numpy實(shí)現(xiàn)圖片去水印的詳細(xì)內(nèi)容,更多關(guān)于OpenCV和Numpy圖片去水印的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Mac下首次安裝pycharm無(wú)project interpreter的問(wèn)題

    解決Mac下首次安裝pycharm無(wú)project interpreter的問(wèn)題

    今天小編就為大家分享一篇解決Mac下首次安裝pycharm無(wú)project interpreter的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python使用flask-caching緩存數(shù)據(jù)的示例代碼

    Python使用flask-caching緩存數(shù)據(jù)的示例代碼

    Flask-Caching 是 Flask 的一個(gè)擴(kuò)展,為任何 Flask 應(yīng)用程序添加了對(duì)各種后端的緩存支持,它基于 cachelib 運(yùn)行,并通過(guò)統(tǒng)一的 API 支持 werkzeug 的所有原始緩存后端,本文給大家介紹了Python使用flask-caching緩存數(shù)據(jù),需要的朋友可以參考下
    2024-12-12
  • YOLOv5車(chē)牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估

    YOLOv5車(chē)牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估

    這篇文章主要介紹了YOLOv5車(chē)牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車(chē)牌識(shí)別,幫助你快速掌握YOLOv5車(chē)牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04
  • 使用Python創(chuàng)建快捷方式管理應(yīng)用

    使用Python創(chuàng)建快捷方式管理應(yīng)用

    在Windows系統(tǒng)中,快速訪問(wèn)常用程序通常通過(guò)“開(kāi)始菜單”中的“應(yīng)用熱門(mén)”功能實(shí)現(xiàn),在這篇博客中,我將向你展示如何使用Python和wxPython創(chuàng)建一個(gè)GUI應(yīng)用,幫助用戶輕松將桌面上的快捷方式添加到Windows“開(kāi)始菜單”的“應(yīng)用熱門(mén)”中,需要的朋友可以參考下
    2024-08-08
  • python如何去除異常值和缺失值的插值

    python如何去除異常值和缺失值的插值

    大家好,本篇文章主要講的是python如何去除異常值和缺失值的插值,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • matplotlib bar()實(shí)現(xiàn)多組數(shù)據(jù)并列柱狀圖通用簡(jiǎn)便創(chuàng)建方法

    matplotlib bar()實(shí)現(xiàn)多組數(shù)據(jù)并列柱狀圖通用簡(jiǎn)便創(chuàng)建方法

    這篇文章主要介紹了matplotlib bar()實(shí)現(xiàn)多組數(shù)據(jù)并列柱狀圖通用簡(jiǎn)便創(chuàng)建方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python模塊之StringIO使用示例

    python模塊之StringIO使用示例

    這篇文章主要介紹了python模塊之StringIO使用示例,本文直接給出示例代碼,需要的朋友可以參考下
    2015-04-04
  • Go語(yǔ)言基于Socket編寫(xiě)服務(wù)器端與客戶端通信的實(shí)例

    Go語(yǔ)言基于Socket編寫(xiě)服務(wù)器端與客戶端通信的實(shí)例

    這篇文章主要介紹了Go語(yǔ)言基于Socket編寫(xiě)服務(wù)器端與客戶端通信的實(shí)例,包括實(shí)現(xiàn)基于自定義通訊協(xié)議的Socket通信,需要的朋友可以參考下
    2016-02-02
  • 關(guān)于Python使用logging庫(kù)進(jìn)行有效日志管理的方法詳解

    關(guān)于Python使用logging庫(kù)進(jìn)行有效日志管理的方法詳解

    在開(kāi)發(fā)大型軟件或處理復(fù)雜問(wèn)題時(shí),我們經(jīng)常需要一種方法來(lái)記錄和跟蹤程序的運(yùn)行狀態(tài),Python 提供了一個(gè)名為 logging 的標(biāo)準(zhǔn)庫(kù),可以幫助我們更好地完成這項(xiàng)任務(wù),在這篇文章中,我們將介紹如何使用 Python 的 logging 庫(kù)進(jìn)行日志記錄
    2023-06-06
  • Python實(shí)現(xiàn)打磚塊小游戲代碼實(shí)例

    Python實(shí)現(xiàn)打磚塊小游戲代碼實(shí)例

    這篇文章主要介紹了Python打磚塊小游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論