溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印

發(fā)布時(shí)間:2021-10-21 10:46:09 來(lái)源:億速云 閱讀:133 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印”吧!

前言

在本文中,我將帶著大家使用 Python 和 OpenCV 對(duì)圖像進(jìn)行加水印。水印有意在圖像上留下文本/標(biāo)志,很多博主會(huì)使用水印來(lái)保護(hù)圖像的版權(quán)。使用水印我們可以確保圖像的所有者是在圖像上印制水印的人。

水印前的圖片:

怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印

logo.png:

怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印

? 第 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ù)的輸出并寫(xiě)入/保存圖像,我們?cè)趦蓚€(gè)函數(shù)中都使用imwrite 函數(shù),首先我們必須提供文件名作為參數(shù),然后是文件本身。cv2.waitKey(0) 用于等待直到用戶(hù)按下 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()

輸出:

怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印

到此,相信大家對(duì)“怎么利用Python和OpenCV對(duì)圖像進(jìn)行加水印”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI