通过渐变处理和Laplacian金字塔融合方法融合两张图像的Python代码
时间: 2023-11-29 18:07:17 浏览: 66
好的,以下是基于OpenCV库的Python代码示例:
```python
import cv2
import numpy as np
# 读取两张图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 将两张图像转换为灰度图像
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 创建高斯金字塔
G1 = gray1.copy()
G2 = gray2.copy()
gp1 = [G1]
gp2 = [G2]
for i in range(6):
G1 = cv2.pyrDown(G1)
G2 = cv2.pyrDown(G2)
gp1.append(G1)
gp2.append(G2)
# 创建拉普拉斯金字塔
lp1 = [gp1[5]]
lp2 = [gp2[5]]
for i in range(5, 0, -1):
G1 = cv2.pyrUp(gp1[i])
G2 = cv2.pyrUp(gp2[i])
L1 = cv2.subtract(gp1[i - 1], G1)
L2 = cv2.subtract(gp2[i - 1], G2)
lp1.append(L1)
lp2.append(L2)
# 创建掩模
mask1 = np.zeros(gray1.shape, dtype=gray1.dtype)
mask1[:, :int(gray1.shape[1] / 2)] = 255
mask2 = cv2.bitwise_not(mask1)
# 对两个图像的金字塔进行融合
LS = []
for l1, l2 in zip(lp1, lp2):
rows, cols = l1.shape
ls = cv2.add(cv2.multiply(l1, mask1), cv2.multiply(l2, mask2))
LS.append(ls)
# 重建融合图像
ls_ = LS[0]
for i in range(1, 6):
ls_ = cv2.pyrUp(ls_)
ls_ = cv2.add(ls_, LS[i])
# 最终结果
result = cv2.cvtColor(ls_, cv2.COLOR_GRAY2BGR)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个代码示例中,我们首先读取两张要融合的图像,并将它们转换为灰度图像。然后,我们构建了这两个图像的高斯金字塔和拉普拉斯金字塔。接着,我们创建了一个掩模,用于指定两张图像在融合过程中的权重。我们对这两个图像的金字塔进行融合,并重建出最终的融合图像。最后,我们将结果转换为彩色图像,并显示出来。
阅读全文