最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

話又說回來這種事情怎么能難倒一個程序員呢?Python的庫有這么多肯定有一款適合我吧?

于是找來了OpenCV。

OpenCV介紹

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

Opencv(Open Source Computer Vision Library)是一個基于開源發(fā)行的跨平臺計算機視覺庫,它實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法,已成為計算機視覺領域最有力的研究工具。

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

  • 圖像處理和計算機視覺的區(qū)別:圖像處理側(cè)重于“處理”圖像–如增強,還原,去噪,分割等等;
  • 而計算機視覺重點在于使用計算機來模擬人的視覺,因此模擬才是計算機視覺領域的最終目標。

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

OpenCV應用領域有:人機互動、物體識別、 圖像分割、人臉識別、動作識別、運動跟蹤、機器人、運動分析、機器視覺、結(jié)構(gòu)分析、汽車安全駕駛等。

安裝:

安裝numpy:pip install numpy

安裝opencv-python:pip install opencv-python

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

如果安裝過程中有誤,可以去下載安裝whl:http://www.lfd.uci.edu/~gohlke/pythonlibs/,找到對應的版本下載。

在命令行安裝成功后,進入開發(fā)環(huán)境導入cv2,如果未報錯,就證明opencv安裝成功。

去水印

圖片展示

記得學過PS中有蒙版,可以使用蒙版遮罩完成。

代碼:

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

但是這種方法使用的時候要求兩張圖片的大小必須是一樣的,否則會一直報錯

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)確實不一樣

import cv2
from PIL import Image
# 黑底白字
src = cv2.imread("images/a1.png")  # 默認的彩色圖(IMREAD_COLOR)方式讀入原始圖像
# black.jpg
mask = cv2.imread('images/a2.png', cv2.IMREAD_GRAYSCALE)  # 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
# 參數(shù):目標修復圖像; 蒙版圖(定位修復區(qū)域); 選取鄰域半徑; 修復算法(包括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)

于是要設置成一樣的大小

import cv2
from PIL import Image
src = cv2.imread("images/a1.png")  # 默認的彩色圖(IMREAD_COLOR)方式讀入原始圖像
# black.jpg
mask = cv2.imread('images/a2.png', cv2.IMREAD_GRAYSCALE)  # 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
# 參數(shù):目標修復圖像; 蒙版圖(定位修復區(qū)域); 選取鄰域半徑; 修復算法(包括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、標定噪聲的特征,使用cv2.inRange二值化標識噪聲對圖片進行二值化處理,具體代碼:cv2.inRange(img, np.array([200, 200, 240]), np.array([255, 255, 255])),把[200, 200, 200]~[255, 255, 255]以外的顏色處理為0;

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

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

實現(xiàn)思路

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

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

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

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

代碼

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]  # 裁剪坐標為[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)
# 擴展待修復區(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é)果:

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

相關文章

  • python文本進度條實例

    python文本進度條實例

    這篇文章主要為大家介紹了python文本進度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Pytorch中torch.flatten()和torch.nn.Flatten()實例詳解

    Pytorch中torch.flatten()和torch.nn.Flatten()實例詳解

    這篇文章主要給大家介紹了關于Pytorch中torch.flatten()和torch.nn.Flatten()的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Python使用GeoIP2實現(xiàn)地圖定位

    Python使用GeoIP2實現(xiàn)地圖定位

    GeoIP2是一種IP地址定位庫,它允許開發(fā)人員根據(jù)IP地址查找有關位置和地理位置的信息,這篇文章主要為大家介紹了python如何使用GeoIP2實現(xiàn)地圖定位,感興趣的可以了解下
    2023-10-10
  • 網(wǎng)站滲透常用Python小腳本查詢同ip網(wǎng)站

    網(wǎng)站滲透常用Python小腳本查詢同ip網(wǎng)站

    這篇文章主要介紹了網(wǎng)站滲透常用Python小腳本查詢同ip網(wǎng)站,需要的朋友可以參考下
    2017-05-05
  • Python多線程掃描端口代碼示例

    Python多線程掃描端口代碼示例

    這篇文章主要介紹了Python多線程掃描端口代碼示例,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 在Heroku云平臺上部署Python的Django框架的教程

    在Heroku云平臺上部署Python的Django框架的教程

    這篇文章主要介紹了在Heroku云平臺上部署Python的Django框架的教程,Heroku云平臺使用了Git版本控制系統(tǒng),所以本教程主要提供了配置所需要的Git腳本,需要的朋友可以參考下
    2015-04-04
  • python特效之字符成像詳解

    python特效之字符成像詳解

    這篇文章主要為大家介紹了python特效之字符成像,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 使用pandas的DataFrame的plot方法繪制圖像的實例

    使用pandas的DataFrame的plot方法繪制圖像的實例

    今天小編就為大家分享一篇使用pandas的DataFrame的plot方法繪制圖像的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python?jiaba庫的使用詳解

    Python?jiaba庫的使用詳解

    這篇文章主要為大家介紹了Python jiaba庫的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • 總結(jié)Python常用的魔法方法

    總結(jié)Python常用的魔法方法

    今天帶大家學習Python的相關知識,文中對Python常用的魔法方法作了非常詳細的總結(jié),對正在學習python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05

最新評論

东山县| 长兴县| 织金县| 财经| 深州市| 大同县| 江川县| 武鸣县| 长顺县| 乐业县| 宁城县| 鹤山市| 永丰县| 延吉市| 南木林县| 恩平市| 门头沟区| 酒泉市| 乳山市| 司法| 石棉县| 萍乡市| 灵山县| 澄城县| 武安市| 棋牌| 铜山县| 竹溪县| 方山县| 定远县| 宝丰县| 渭源县| 英吉沙县| 五常市| 平陆县| 张家川| 太原市| 读书| 晋中市| 靖边县| 合山市|