第二篇:圖片添加水印(加 logo)
1. 實驗原理
水印原理:
- 圖片添加水印是圖像疊加的一種應用,分為透明水印和不透明水印。
- 水印的實現通常依賴于像素值操作,將水印圖片融合到目標圖片中,常用的方法包括:
- 位運算:通過掩碼(Mask)將目標區域清空,再將水印疊加到清空的區域。
- Alpha 混合(Alpha Blending):通過加權計算將水印半透明地融合到目標圖片。
步驟:
- 將水印圖片轉為灰度圖,并通過閾值處理生成二值化掩碼。
- 利用掩碼清空背景圖像中水印位置的區域。
- 將水印圖片嵌入到清空區域,完成水印添加。
2. 實驗代碼
以下為具體代碼實現:
import cv2# 讀取背景圖像
img = cv2.imread("./background.jpeg")# 讀取兩個 logo 圖像
logo = cv2.imread("./logo.png")# --------------------處理第一個 logo--------------------# 將 logo 轉換為灰度圖像,用于后續的二值化處理
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)# 對灰度圖像進行二值化處理,生成二值掩碼
_, logo_binary = cv2.threshold(logo_gray, # 輸入的灰度圖像0, # 閾值(自動確定)255, # 二值化后的最大值cv2.THRESH_BINARY_INV # 反閾值化,將前景變為黑色,背景變為白色
)# 定義第一個 logo 的插入位置 (x1, y1)
x1, y1 = 10, 100# 從背景圖中截取一個與 logo 大小相同的 ROI(Region of Interest)區域
ROI = img[y1:y1+logo.shape[0], x1:x1+logo.shape[1]]# 使用掩碼進行位與運算,將 ROI 中對應 logo 的位置清空
ROI_logo = cv2.bitwise_and(ROI, ROI, mask=logo_binary)# 將清空的 ROI 區域與 logo 圖像進行加法操作,完成 logo 的融合
img_logo = cv2.add(ROI_logo, logo)# 將融合后的 logo 替換回背景圖的對應位置
img[y1:y1+logo.shape[0], x1:x1+logo.shape[1]] = img_logo# --------------------顯示最終結果--------------------# 顯示最終結果圖像
cv2.imshow('image', img)# 等待用戶按鍵退出窗口
cv2.waitKey(0)# 銷毀所有窗口
cv2.destroyAllWindows()
3. 實驗現象
實驗結果:
- 原始圖片:背景圖為一個沒有水印的圖片。
- 水印圖像:Logo 被疊加到背景圖的指定位置,與背景圖的像素融合,看起來像是原始圖像的一部分。