opencv图像融合 高斯金字塔

import cv2
import numpy as np
import matplotlib.pyplot as plt
 
A = cv2.imread('E:/python/apple.png')
B = cv2.imread('E:/python/orange.png')
A=cv2.resize(A,(256,256)) 
B=cv2.resize(B,(256,256)) 
#对A进行高斯金字塔模糊
G = A.copy()
gpA = [G]
for i in range(6):
    G = cv2.pyrDown(G)
    gpA.append(G)
 
#对B进行高斯金字塔模糊
G = B.copy()
gpB = [G]
for i in range(6):
    G = cv2.pyrDown(G)
    gpB.append(G)
 
#对A进行拉普拉斯金字塔模糊
lpA = [gpA[5]]
for i in range(5,0,-1):
    size = (gpA[i-1].shape[1], gpA[i-1].shape[0])
    GE = cv2.pyrUp(gpA[i], dstsize=size)
    L = cv2.subtract(gpA[i-1],GE)
    lpA.append(L)
 
#对B进行拉普拉斯金字塔模糊
lpB = [gpB[5]]
for i in range(5,0,-1):
    size = (gpB[i-1].shape[1], gpB[i-1].shape[0])
    GE = cv2.pyrUp(gpB[i], dstsize=size)
    L = cv2.subtract(gpB[i-1],GE)
    lpB.append(L)
 
#左右每一半的图像都添加到每一层
#生成一个单独的数组
LS = []
for la,lb in zip(lpA,lpB):
    rows,cols,dpt = la.shape
    #下标必须是整数
    a=np.uint8(cols/2)
    ls = np.hstack((la[:,0:a], lb[:,a:]))
    LS.append(ls)
 
ls_ = LS[0]
for i in range(1,6):
    size = (LS[i].shape[1], LS[i].shape[0])
    ls_ = cv2.pyrUp(ls_, dstsize=size)
    ls_ = cv2.add(ls_, LS[i])
 
real = np.hstack((A[:,:a],B[:,a:]))
 

plt.subplot(221),plt.imshow(A),plt.title('apple')
plt.subplot(222),plt.imshow(B),plt.title('orange')
plt.subplot(223),plt.imshow(real),plt.title('direct')
plt.subplot(224),plt.imshow(ls_),plt.title('pyramid')
plt.show

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41244435/article/details/86647226