实验原理
- 将一个透明的水印图层覆盖到原始图像上
实验过程
python
import cv2
def add_logo_to_image(img, logo_path, position, mask_threshold=0):
"""
在图像上添加logo。
参数:
img: 输入的图像,为一个二维或三维的numpy数组。
logo_path: logo图片的路径,字符串类型。
position: logo在图像上的位置,为一个元组,包含两个整数,分别表示x和y坐标。
mask_threshold: 用于创建logo二值掩码的阈值,可选,默认为0。
返回:
添加logo后的图像。
"""
# 读取logo图片
logo = cv2.imread(logo_path)
# 将logo转换为灰度图
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
# 根据灰度图和阈值创建logo的二值掩码
_, logo_binary = cv2.threshold(logo_gray, mask_threshold, 255, cv2.THRESH_BINARY_INV)
# 解包位置坐标
x, y = position
# 根据logo尺寸定义图像上的区域
ROI = img[y:y + logo.shape[0], x:x + logo.shape[1]]
# 使用掩码对ROI区域和logo进行位运算,以融合logo
ROI_logo = cv2.bitwise_and(ROI, ROI, mask=logo_binary)
img_logo = cv2.add(ROI_logo, logo)
# 将融合后的logo放置到原图像的相应位置
img[y:y + logo.shape[0], x:x + logo.shape[1]] = img_logo
# 返回添加logo后的图像
return img
# 读取背景图像
img = cv2.imread('./bgc.jpeg')
# 在图像的左上角添加第一个logo
img = add_logo_to_image(img, './tm1.png', (0, 0))
# 在图像的右上角添加第二个logo
img = add_logo_to_image(img, './tm2.png', (400, 0))
# 显示最终的图像
cv2.imshow('img', img)
# 等待按键按下,然后关闭窗口
cv2.waitKey(0)