基于 OpenCV 的图像融合
- 步骤1—图像导入
- 步骤2—调整图像大小
- 步骤3—融合图像
- 步骤4—导出结果
import cv2
'''
图片读取
img = cv2.imread(filepath,flags)
参数:
filepath:要读入图片的完整路径
flags:读入图片的标志
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
注意:cv2.imread()读进来直接是BGR,格式数据格式在0~255,不是我们最常见的RGB格式。
'''
步骤1 —图像导入
bg = cv2.imread('images/background.jpg', cv2.IMREAD_COLOR)
fg = cv2.imread('images/foreground.png', cv2.IMREAD_COLOR)
background.jpg
foreground.png
步骤2-调整图像大小
# 调整要混合的图像的大小。先调整图像大小,以确保它们的尺寸相同。
# 要使融合能够正常进行,需要使用相同的大小图像。否则,它将返回错误消息。
print(bg.shape)
print(fg.shape)
# 背景图像为682到1024像素。前景图像为576至1024像素。我们将使用OpenCV的调整大小功能调整它们的大小。
# cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) —— 将原始图像调整为指定大小。
'''
scr:原始图像
dsize:输出图像的尺寸(元组方式)
dst:输出图像
fx:沿水平轴缩放的比例因子
fy:沿垂直轴缩放的比例因子
interpolation:插值方法,有5种插值方法
'''
dim = (1200, 800)
# cv2.INTER_AREA:使用像素区域关系进行重采样。
resized_bg = cv2.resize(bg, dim, interpolation=cv2.INTER_AREA)
resized_fg = cv2.resize(fg, dim, interpolation=cv2.INTER_AREA)
print(resized_bg.shape)
print(resized_bg.shape)
步骤3-融合图像
# 函数cv2.addWeighted()的主要功能就是将两幅图像合成为一幅图像
# 在对图像进行合成时,需要注意的一点是,图像的尺寸维度必须相同,才能使用此函数进行合成
# addWeighted函数,有5个参数,可以列出为:图像源1,src1权重,图像源2,src2权重,伽玛。每个图像的权重值必须小于1。
# 这是混合方程式: blend = (image scr1)*(src1 weight) + (image scr2)*(src2 weight) + gamma
# 我们给前景加了一些权重。这样,背景将更暗,文本将更亮。到目前为止一切顺利,混合完成。
blend = cv2.addWeighted(resized_bg, 0.5, resized_fg, 0.8, 0.0)
步骤4-导出结果
cv2.imwrite('images/blended.png', blend)
blend = cv2.imread('blended.png')
cv2.imshow('blend', blend)
cv2.waitKey(0)
blended.png
参考链接:
https://blog.csdn.net/qq_42722197/article/details/111189516