一,实验原理
添加水印的过程可以理解为将一张图片中的物体或图案提取出来,并叠加到另一张图片上。具体操作是:先将原始图像转换为灰度图并进行二值化,去除背景,得到一个掩膜图像。然后将掩膜与目标区域进行"与"运算,使目标物体的形状出现在该区域。最后,将目标物体图像与该区域相加,完成水印添加。
二,实验代码
add_img.py
python
import cv2
def img_add(logo, img, x, y):
# 将logo图像进行灰度化和二值化,得到一个白底的掩膜
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
_, logo_binary = cv2.threshold(logo_gray, 0, 255, cv2.THRESH_BINARY_INV)
# 在原始图像中选取和logo同等大小的矩形区域
# 这个区域的左上角坐标为(x, y),大小与logo相同
ROI = img[y:y + logo.shape[0], x:x + logo.shape[1]]
# 将ROI区域和logo的掩膜进行位与运算,结果存在ROI_logo中
ROI_logo = cv2.bitwise_and(ROI, ROI, mask=logo_binary)
# 将处理后的ROI区域与原始的logo进行加法运算,
# 得到最终的融合logo与ROI区域的效果
img_logo = cv2.add(ROI_logo, logo)
# 将融合的图像在要添加logo的原图中进行替换
img[y:y + logo.shape[0], x:x + logo.shape[1]] = img_logo
return img
运行文件中:
python
import cv2
from day4 import img_add
# 读取两个logo和一个原图
logo = cv2.imread("1.png")
logo2 = cv2.imread("3.png")
img = cv2.imread("2.jpeg")
# 调整原图的大小
img = cv2.resize(img, (0, 0), fx=1, fy=0.45)
# 在原图上的指定位置添加logo和logo2
img = img_add.img_add(logo, img, 120, 180)
img = img_add.img_add(logo2, img, 400, 200)
# 显示加上logo后的图像
cv2.imshow('image', img)
cv2.waitKey(0)
三,实验现象
结果: