如何利用Python和OpenCV對(duì)圖像進(jìn)行加水印詳解
前言
在本文中,我將帶著大家使用 Python 和 OpenCV 對(duì)圖像進(jìn)行加水印。水印有意在圖像上留下文本/標(biāo)志,很多博主會(huì)使用水印來(lái)保護(hù)圖像的版權(quán)。使用水印我們可以確保圖像的所有者是在圖像上印制水印的人。
水印前的圖片:
logo.png:
🌌 第 1 步:導(dǎo)入 OpenCV 并讀取logo和要應(yīng)用水印的圖像
# 使用 OpenCV 導(dǎo)入 cv2 的水印圖像 import cv2 # 導(dǎo)入我們將要使用的logo logo = cv2.imread("logo.png") # 導(dǎo)入我們要應(yīng)用水印的圖像 img = cv2.imread("haiyong.png")
💨 第 2步:計(jì)算兩個(gè)圖像的高度和寬度
計(jì)算兩個(gè)圖像的高度和寬度,并將它們保存到其他變量中。我們需要計(jì)算寬度和高度,因?yàn)槲覀円獙⑺》胖迷趫D像上的某個(gè)位置,為此,我們只需要知道徽標(biāo)和圖像的正確寬度和高度。
# 計(jì)算logo的尺寸高度和寬度 h_logo, w_logo, _ = logo.shape # 圖像的高度和寬度 h_img, w_img, _ = img.shape
在這里,我們使用了OpenCV 中的shape函數(shù),它返回圖像的高度和寬度的元組。
🚀 第 3 步:將水印放置在圖像的中心
現(xiàn)在,我們將計(jì)算圖像中心的坐標(biāo),因?yàn)槲乙獙⑺》胖迷趫D像的中心,你們也可以選擇其他位置。
# 計(jì)算中心計(jì)算中心的坐標(biāo),我們將在其中放置水印 center_y = int(h_img/2) center_x = int(w_img/2) # 從上、下、右、左計(jì)算 top_y = center_y - int(h_logo/2) bottom_y = top_y + h_logo right_x = left_x + w_logo left_x = center_x - int(w_logo/2)
🍺 第 4 步:使用 OpenCV 中的 addWeighted 函數(shù)
要為圖像添加水印,我們將使用 OpenCV 中的 addWeighted 函數(shù)。首先,我們將提供要放置水印的目的地,然后將該目的地傳遞給帶有圖像和徽標(biāo)的 addWeighted 函數(shù)。
語(yǔ)法: cv2.addWeighted(source1, alpha, source2, beta, gamma)
在我們的例子中,source1 是我們想要放置logo的圖像,alpha 是logo的不透明度,source2 是logo本身,我們將相應(yīng)地設(shè)置 beta為1,不透明度的 alpha 和 gamma分別為 1 和 0。
# 給圖片添加水印 destination = img[top_y:bottom_y, left_x:right_x] result = cv2.addWeighted(destination, 1, logo, 1, 0)
🎨 第 5 步:顯示結(jié)果并保存輸出
之后,我們只是顯示結(jié)果并保存輸出。為了顯示我們使用imshow 函數(shù)的輸出并寫入/保存圖像,我們?cè)趦蓚€(gè)函數(shù)中都使用imwrite 函數(shù),首先我們必須提供文件名作為參數(shù),然后是文件本身。cv2.waitKey(0) 用于等待直到用戶按下 Esc 鍵,之后 cv2.destroyAllWindows 函數(shù)將關(guān)閉窗口。
# displaying and saving image img[top_y:bottom_y, left_x:right_x] = result cv2.imwrite("watermarked.jpg", img) cv2.imshow("Watermarked Image", img) cv2.waitKey(0) cv2.destroyAllWindows()
🛹 下面是完整的實(shí)現(xiàn):
# 使用 OpenCV 導(dǎo)入 cv2 的水印圖像 import cv2 # 導(dǎo)入我們將要使用的logo logo = cv2.imread("logo.png") # 導(dǎo)入我們要應(yīng)用水印的圖像 img = cv2.imread("haiyong.png") # 計(jì)算logo的尺寸高度和寬度 h_logo, w_logo, _ = logo.shape # 圖像的高度和寬度 h_img, w_img, _ = img.shape # 計(jì)算中心計(jì)算中心的坐標(biāo),我們將在其中放置水印 center_y = int(h_img/2) center_x = int(w_img/2) # 從上、下、右、左計(jì)算 top_y = center_y - int(h_logo/2) left_x = center_x - int(w_logo/2) bottom_y = top_y + h_logo right_x = left_x + w_logo # 給圖片添加水印 destination = img[top_y:bottom_y, left_x:right_x] result = cv2.addWeighted(destination, 1, logo, 1, 0) # 顯示和保存圖像 img[top_y:bottom_y, left_x:right_x] = result cv2.imwrite("watermarked.jpg", img) cv2.imshow("Watermarked Image", img) cv2.waitKey(0) cv2.destroyAllWindows()
輸出:
總結(jié)
到此這篇關(guān)于如何利用Python和OpenCV對(duì)圖像進(jìn)行加水印的文章就介紹到這了,更多相關(guān)Python和OpenCV對(duì)圖像加水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)異常值自動(dòng)檢測(cè)的案例分享
在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中,異常值的檢測(cè)是一個(gè)關(guān)鍵步驟,它有助于識(shí)別數(shù)據(jù)中的異常模式和離群點(diǎn),本文將介紹Python中異常值檢測(cè)的實(shí)戰(zhàn)案例,使用一些常見(jiàn)的技術(shù)和庫(kù),為大家提供全面的示例代碼和詳細(xì)解釋2024-01-01python numpy--數(shù)組的組合和分割實(shí)例
這篇文章主要介紹了python numpy--數(shù)組的組合和分割實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02基于python實(shí)現(xiàn)判斷字符串是否數(shù)字算法
這篇文章主要介紹了基于python實(shí)現(xiàn)判斷字符串是否數(shù)字算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07如何徹底解決Python中matplotlib不顯示中文的問(wèn)題詳解(顯示方框)
Matplotlib繪制圖像顯示中文的時(shí)候,中文會(huì)變成小方格子,下面這篇文章主要給大家介紹了關(guān)于如何徹底解決Python中matplotlib不顯示中文問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04python中sklearn庫(kù)predict及python sklearn linearmodel(
Scikit-learn(sklearn)是機(jī)器學(xué)習(xí)中常用的第三方模塊,對(duì)常用的機(jī)器學(xué)習(xí)方法進(jìn)行了封裝,包括回歸(Regression)、降維(Dimensionality Reduction)、分類(Classfication)、聚類(Clustering)等方法,今天小編給大家分享python中sklearn庫(kù)predict的問(wèn)題,感興趣的朋友一起看看吧2024-02-02Python入門Anaconda和Pycharm的安裝和配置詳解
這篇文章主要介紹了Python入門Anaconda和Pycharm的安裝和配置詳解,文章通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python pandas dataframe 按列或者按行合并的方法
下面小編就為大家分享一篇python pandas dataframe 按列或者按行合并的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04