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
opencv图像融合 高斯金字塔
猜你喜欢
转载自blog.csdn.net/qq_41244435/article/details/86647226
今日推荐
周排行