使用时保证已经安装了opencv-python
import cv2bg = "BG.jpg" # 背景图名称
fg = "FG.jpg" # 前景图名称
output_filename = "new.jpg" # 合成后图片名称img_bg = cv2.imread(bg) # 读取背景图
img_fg = cv2.imread(fg) # 读取前景图# 读取背景图和前景图的像素和通道数
rows_bg, cols_bg, channels_bg = img_bg.shape
rows_fg, cols_fg, channels_fg = img_fg.shape
change_points = (cols_bg, rows_bg)# 修改前景图大小为背景图大小
img_fg = cv2.resize(img_fg, change_points, interpolation=cv2.INTER_LINEAR)roi = img_bg[0:rows_bg, 0:cols_bg] # 划定ROI区域
img_fg2gray = cv2.cvtColor(img_fg, cv2.COLOR_BGR2GRAY) # 前景图转为灰度图
ret, mask = cv2.threshold(img_fg2gray, 175, 255, cv2.THRESH_BINARY) # 设定阈值和掩膜
mask_inv = cv2.bitwise_not(mask) # 掩膜取反img_bg_bg = cv2.bitwise_and(roi, roi, mask=mask) # 获背景图扣去空白
img_fg_fg = cv2.bitwise_and(img_fg, img_fg, mask=mask_inv) # 前景图扣去空白dst = cv2.add(img_bg_bg, img_fg_fg) # 合成图像cv2.imwrite(output_filename, dst) # 保存图像
代码功能:
-
导入OpenCV库:
import cv2
-
定义背景图(bg)、前景图(fg)和输出图片的文件名(output_filename)。
-
使用OpenCV的
cv2.imread
函数读取背景图和前景图。 -
获取背景图和前景图的尺寸和通道数,保存在
rows_bg, cols_bg, channels_bg
和rows_fg, cols_fg, channels_fg
中。 -
将前景图的大小调整为背景图的大小,使用
cv2.resize
函数。 -
划定ROI(Region of Interest)区域,即在背景图上选择合成的区域。
-
将前景图转为灰度图,使用
cv2.cvtColor
函数。 -
设定阈值和创建掩膜,使用
cv2.threshold
函数。 -
对掩膜取反,得到反向掩膜。
-
使用
cv2.bitwise_and
函数将背景图和前景图按照掩膜进行与运算,分别得到背景图中保留前景部分和前景图中保留背景部分的图像。 -
使用
cv2.add
函数将上述两个部分叠加,得到最终合成的图像。 -
使用
cv2.imwrite
函数将合成后的图像保存到指定文件名的文件中。