实验原理
在图像处理中,将一个图像(如Logo)合成到另一个图像(如背景图)是一个常见的任务。这种技术可以用于品牌宣传、广告制作等多种应用场景。本实验通过OpenCV库实现Logo的嵌入,主要涉及以下几个步骤:
- 图像读取:使用OpenCV的
cv2.imread
函数读取背景图像和Logo图像。 - 灰度化与二值化:将Logo图像转换为灰度图,然后通过二值化操作得到一个掩膜(mask),该掩膜用于后续的图像合成。
- 区域选择:在背景图像中选择一个区域(ROI),该区域将被用来放置Logo。
- 位运算:使用
cv2.bitwise_and
函数将ROI与Logo掩膜进行位与运算,以保留ROI中对应掩膜为白色(或非零)的部分。 - 图像融合:将位运算的结果与Logo图像进行融合,得到最终的合成图像。
- 替换与显示:将合成后的Logo区域替换回背景图像的相应位置,并显示最终结果。
实验代码
以下是实现上述步骤的Python代码:
import cv2
# 输入两张图
img = cv2.imread("./bgc.jpeg")
logo = cv2.imread("./logo.png")
# 对logo图进行灰度化和二值化 得到 白底的掩膜
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
_, logo_binary = cv2.threshold(logo_gray,
0, # 阈值
255, # 最大值
cv2.THRESH_BINARY_INV # 反阈值法
)
# 在原图中 选取和logo图同等大小的 你想要插入logo的位置
ROI = img[10:10+logo.shape[0], 100:100+logo.shape[1]]
# 将ROI 和 logo的掩膜进行位与运算
ROI_logo = cv2.bitwise_and(ROI, # 参数1
ROI, # 参数2
mask=logo_binary) # logo做掩膜
# 将处理后的ROI区域 与 原始的logo 融合add
img_logo = cv2.add(ROI_logo, logo)
# 将融合的图像 在要添加logo的原图中 替换
img[10:10+logo.shape[0], 100:100+logo.shape[1]] = img_logo
cv2.imshow('image', img)
cv2.waitKey(0)