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

Python去除圖片水印實(shí)現(xiàn)方法詳解

 更新時(shí)間:2023年01月10日 11:25:40   作者:宋宋講編程  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)處理圖片水印的相關(guān)資料,主要是實(shí)現(xiàn)圖片水印的去除效果,感興趣的小伙伴可以嘗試一下

最近寫(xiě)文章遇到圖片有水印,如何去除水印呢?

網(wǎng)上找了各種辦法,也跑到小紅書(shū)、抖音等平臺(tái)找有沒(méi)有不收費(fèi)就去水印的網(wǎng)站,但是基本上都是需要VIP會(huì)員才可以。

話又說(shuō)回來(lái)這種事情怎么能難倒一個(gè)程序員呢?Python的庫(kù)有這么多肯定有一款適合我吧?

于是找來(lái)了OpenCV。

OpenCV介紹

文檔鏈接:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html

Opencv(Open Source Computer Vision Library)是一個(gè)基于開(kāi)源發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),它實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法,已成為計(jì)算機(jī)視覺(jué)領(lǐng)域最有力的研究工具。

在這里我們要區(qū)分兩個(gè)概念:

  • 圖像處理和計(jì)算機(jī)視覺(jué)的區(qū)別:圖像處理側(cè)重于“處理”圖像–如增強(qiáng),還原,去噪,分割等等;
  • 而計(jì)算機(jī)視覺(jué)重點(diǎn)在于使用計(jì)算機(jī)來(lái)模擬人的視覺(jué),因此模擬才是計(jì)算機(jī)視覺(jué)領(lǐng)域的最終目標(biāo)。

OpenCV用C++語(yǔ)言編寫(xiě),它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS, 如今也提供對(duì)于C#、Ch、Ruby,GO的支持

OpenCV應(yīng)用領(lǐng)域有:人機(jī)互動(dòng)、物體識(shí)別、 圖像分割、人臉識(shí)別、動(dòng)作識(shí)別、運(yùn)動(dòng)跟蹤、機(jī)器人、運(yùn)動(dòng)分析、機(jī)器視覺(jué)、結(jié)構(gòu)分析、汽車(chē)安全駕駛等。

安裝:

安裝numpy:pip install numpy

安裝opencv-python:pip install opencv-python

安裝opencv-contrib-python**:pip install opencv-contrib-python

如果安裝過(guò)程中有誤,可以去下載安裝whl:http://www.lfd.uci.edu/~gohlke/pythonlibs/,找到對(duì)應(yīng)的版本下載。

在命令行安裝成功后,進(jìn)入開(kāi)發(fā)環(huán)境導(dǎo)入cv2,如果未報(bào)錯(cuò),就證明opencv安裝成功。

去水印

圖片展示

記得學(xué)過(guò)PS中有蒙版,可以使用蒙版遮罩完成。

代碼:

python
# 方式一
import cv2
# 黑底白字
src = cv2.imread("images/a1.png")  # 默認(rèn)的彩色圖(IMREAD_COLOR)方式讀入原始圖像
# black.jpg
mask = cv2.imread('images/a2.png', cv2.IMREAD_GRAYSCALE)  # 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
# 參數(shù):目標(biāo)修復(fù)圖像; 蒙版圖(定位修復(fù)區(qū)域); 選取鄰域半徑; 修復(fù)算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果較好)
dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS)
cv2.imwrite('result.jpg', dst)

但是這種方法使用的時(shí)候要求兩張圖片的大小必須是一樣的,否則會(huì)一直報(bào)錯(cuò)

Traceback (most recent call last):
  File "/Users/running/PycharmProjects/untitled8/test1.py", line 16, in <module>
    get_water()
  File "/Users/running/PycharmProjects/untitled8/test1.py", line 11, in get_water
    dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS)
cv2.error: OpenCV(4.1.2) /Users/travis/build/skvark/opencv-python/opencv/modules/photo/src/inpaint.cpp:748: error: (-209:Sizes of input arguments do not match) All the input and output images must have the same size in function 'icvInpaint'
 

可以分別打印一下尺寸看看,發(fā)現(xiàn)確實(shí)不一樣

import cv2
from PIL import Image
# 黑底白字
src = cv2.imread("images/a1.png")  # 默認(rèn)的彩色圖(IMREAD_COLOR)方式讀入原始圖像
# black.jpg
mask = cv2.imread('images/a2.png', cv2.IMREAD_GRAYSCALE)  # 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
# 參數(shù):目標(biāo)修復(fù)圖像; 蒙版圖(定位修復(fù)區(qū)域); 選取鄰域半徑; 修復(fù)算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果較好)
print(src.shape, mask.shape)
dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS)
cv2.imwrite('result1.jpg', dst)

(1454, 2182, 3) (1456, 2184)

于是要設(shè)置成一樣的大小

import cv2
from PIL import Image
src = cv2.imread("images/a1.png")  # 默認(rèn)的彩色圖(IMREAD_COLOR)方式讀入原始圖像
# black.jpg
mask = cv2.imread('images/a2.png', cv2.IMREAD_GRAYSCALE)  # 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
# 參數(shù):目標(biāo)修復(fù)圖像; 蒙版圖(定位修復(fù)區(qū)域); 選取鄰域半徑; 修復(fù)算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果較好)
out2 = cv2.resize(mask,(2182,1454))
out1 = cv2.resize(src,(2182,1454))
print(out1.shape, out2.shape)
dst = cv2.inpaint(out1, out2, 3, cv2.INPAINT_NS)
#
cv2.imwrite('result.jpg', dst)

結(jié)果:

這種方式似乎還是可以看到一些水印,我們可以采用下面一種方法。

圖片去水印原理

1、標(biāo)定噪聲的特征,使用cv2.inRange二值化標(biāo)識(shí)噪聲對(duì)圖片進(jìn)行二值化處理,具體代碼:cv2.inRange(img, np.array([200, 200, 240]), np.array([255, 255, 255])),把[200, 200, 200]~[255, 255, 255]以外的顏色處理為0;

2、使用OpenCV的dilate方法,擴(kuò)展特征的區(qū)域,優(yōu)化圖片處理效果;

3、使用inpaint方法,把噪聲的mask作為參數(shù),推理并修復(fù)圖片。

實(shí)現(xiàn)思路

1、從原圖片,截取右下角部分,另存為新圖片;

2、識(shí)別水印,顏色值為:[200, 200, 200]~[255, 255, 255]

3、去掉水印,還原圖片;

4、把原圖片、去掉水印的新圖片,進(jìn)行重疊合并;

代碼

import cv2
import numpy as np
from PIL import Image
import os
dir = os.getcwd()
path = "a1.jpg"
newPath = "new.jpg"
img = cv2.imread(path, 1)
hight, width, depth = img.shape[0:3]
# 截取
cropped = img[int(hight * 0.8):hight, int(width * 0.7):width]  # 裁剪坐標(biāo)為[y0:y1, x0:x1]
cv2.imwrite(newPath, cropped)
imgSY = cv2.imread(newPath, 1)
# 圖片二值化處理,把[200,200,200]-[250,250,250]以外的顏色變成0
thresh = cv2.inRange(imgSY, np.array([200, 200, 200]), np.array([250, 250, 250]))
# 創(chuàng)建形狀和尺寸的結(jié)構(gòu)元素
kernel = np.ones((3, 3), np.uint8)
# 擴(kuò)展待修復(fù)區(qū)域
hi_mask = cv2.dilate(thresh, kernel, iterations=10)
specular = cv2.inpaint(imgSY, hi_mask, 5, flags=cv2.INPAINT_TELEA)
cv2.imwrite(newPath, specular)
# 覆蓋圖片
imgSY = Image.open(newPath)
img = Image.open(path)
img.paste(imgSY, (int(width * 0.7), int(hight * 0.8), width, hight))
img.save(newPath)

輸出結(jié)果:

到此這篇關(guān)于Python去除圖片水印實(shí)現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)Python去除圖片水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Python]程序的分支結(jié)構(gòu)

    淺談Python]程序的分支結(jié)構(gòu)

    這篇文章主要介紹了淺談Python]程序的分支結(jié)構(gòu),語(yǔ)句塊是 if 條件滿足后執(zhí)行的一個(gè)或多個(gè)語(yǔ)句序列,語(yǔ)句塊中語(yǔ)句通過(guò)與 if 所在行形成縮進(jìn)表達(dá)包含關(guān)系,需要的朋友可以參考下
    2023-04-04
  • 關(guān)于python多進(jìn)程中的常用方法詳解

    關(guān)于python多進(jìn)程中的常用方法詳解

    這篇文章主要介紹了關(guān)于python多進(jìn)程中的常用方法詳解,python中的多線程其實(shí)并不是真正的多線程,如果想要充分地使用多核CPU資源,在python中大部分情況需要使用多進(jìn)程,需要的朋友可以參考下
    2023-07-07
  • python利用wx實(shí)現(xiàn)界面按鈕和按鈕監(jiān)聽(tīng)和字體改變的方法

    python利用wx實(shí)現(xiàn)界面按鈕和按鈕監(jiān)聽(tīng)和字體改變的方法

    今天小編就為大家分享一篇python利用wx實(shí)現(xiàn)界面按鈕和按鈕監(jiān)聽(tīng)和字體改變的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas詳解

    Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas詳解

    這篇文章主要給大家介紹了Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas,文中通過(guò)示例嗲嗎給大家介紹的很詳細(xì),相信對(duì)大家的學(xué)習(xí)或者理解具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • Python字符串的轉(zhuǎn)義字符

    Python字符串的轉(zhuǎn)義字符

    這篇文章主要介紹了Python字符串的轉(zhuǎn)義字符,轉(zhuǎn)義字符是指,用一些普通字符的組合來(lái)代替一些特殊字符,由于其組合改變了原來(lái)字符表示的含義,下文相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • 利用python庫(kù)matplotlib繪制不同的圖表

    利用python庫(kù)matplotlib繪制不同的圖表

    這篇文章主要介紹了利用python庫(kù)matplotlib繪制不同的圖表,使用python中的matplotlib繪制圖表,主要分享繪制簡(jiǎn)單的曲線圖、單條曲線圖、多條曲線圖、直方圖以及散點(diǎn)圖的思路和用法,需要的朋友可以參考一下
    2022-03-03
  • python+selenium小米商城紅米K40手機(jī)自動(dòng)搶購(gòu)的示例代碼

    python+selenium小米商城紅米K40手機(jī)自動(dòng)搶購(gòu)的示例代碼

    這篇文章主要介紹了python+selenium小米商城紅米K40手機(jī)自動(dòng)搶購(gòu)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python裝飾器實(shí)現(xiàn)方法及應(yīng)用場(chǎng)景詳解

    Python裝飾器實(shí)現(xiàn)方法及應(yīng)用場(chǎng)景詳解

    這篇文章主要介紹了Python裝飾器實(shí)現(xiàn)方法及應(yīng)用場(chǎng)景詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 對(duì)python實(shí)現(xiàn)二維函數(shù)高次擬合的示例詳解

    對(duì)python實(shí)現(xiàn)二維函數(shù)高次擬合的示例詳解

    今天小編就為大家分享一篇對(duì)python實(shí)現(xiàn)二維函數(shù)高次擬合的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python列表list操作相關(guān)知識(shí)小結(jié)

    Python列表list操作相關(guān)知識(shí)小結(jié)

    今天,本喵帶大家仔細(xì)溫習(xí)一下Python的列表,溫故而知新,不亦說(shuō)乎,需要的朋友可以參考下
    2020-01-01

最新評(píng)論