Python 17.OpenCV 图像金字塔,图像融合

'''
图像金字塔有两种:高斯金字塔和拉普拉斯金字塔
高斯金字塔当中,(高等级)低分辨率的图像由(低等级)高分辨率的图像去除连续的行和列得到。顶部图像的每个像素值等于下面图像的对应像素的5*5区域的高斯加权平均值。这样操作以后,M×N的图像就变成了M/2×N/2的图像了,面积变为原理的四分之一。继续这样的操作就会得到一个图像分辨率递减的金字塔,使用函数cv2.pyrDown() 和 cv2.pyrUp()构建。
拉普拉斯金字塔由高斯金字塔产生
'''

import cv2
import numpy as np

A = cv2.imread('test1.png')
B = cv2.imread('test2.png')

G = A.copy()
gpA = [G]
for i in range(6):
    G = cv2.pyrDown(G)
    gpA.append(G)

G = B.copy()
gpB = [G]
for i in range(6):
    G = cv2.pyrDown(G)
    gpB.append(G)

lpA = [gpA[5]]
for i in range(5, 0, -1):
    GE = cv2.pyrUp(gpA[i])
    L = cv2.subtract(gpA[i-1], GE)
    lpA.append(L)


lpB = [gpB[5]]
for i in range(5, 0, -1):
    GE = cv2.pyrUp(gpB[i])
    L = cv2.subtract(gpB[i-1], GE)
    lpB.append(L)

LS = []
for la, lb in zip(lpA, lpB):
    rows, cols = la.shape[:2]
    ls = np.hstack((la[:, 0:256], lb[:, 256:]))
    LS.append(ls)

ls_ = LS[0]
for i in range(1, 6):
    ls_ = cv2.pyrUp(ls_)
    ls_ = cv2.add(ls_, LS[i])

real = np.hstack((A[:, :256], B[:, 256:]))

cv2.imshow('ls_', ls_)
cv2.imshow('real', real)

cv2.waitKey()
cv2.destroyAllWindows()

素材不太好融合的不好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值