Opencv_Python 官方教程 第15章 图像金字塔

该文章介绍如何利用OpenCV库中的图像金字塔功能进行图像融合。通过创建高斯金字塔和拉普拉斯金字塔,将两个图像(在这里是水果图片)无缝结合在一起,展示了cv2.pyrUp()和cv2.pyrDown()函数的应用。
摘要由CSDN通过智能技术生成

目标
• 学习图像金字塔
• 使用图像创建一个新水果:“橘子苹果”
• 将要学习的函数有:cv2.pyrUp(),cv2.pyrDown()。

下面博客最全:
https://blog.csdn.net/weixin_57440207/article/details/122647012

使用高斯金字塔进行图像融合

  • 图像金字塔的一个应用是图像融合。例如,在图像缝合中,你需要将两幅图叠在一起,但是由于连接区域图像像素的不连续性,整幅图的效果看起来会很差。这时图像金字塔就可以排上用场了,他可以帮你实现无缝连接。这里的一个经典案例就是将两个水果融合成一个,看看下图也许你就明白我在讲什么
    了。
import cv2
import numpy as np

A = cv2.imread('1.png')
B = cv2.imread('2.png')
# 注意:为了使后面可以逐渐减半,这里的尺寸必须为2的次幂
print(A.shape)
print(B.shape)
A = cv2.resize(A, (256, 256), interpolation=cv2.INTER_CUBIC)
B = cv2.resize(B, (256, 256), interpolation=cv2.INTER_CUBIC)
# 生成高斯金字塔
G = A.copy()
gpA = [G]
for i in range(5):
    G = cv2.pyrDown(G)
    gpA.append(G)

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


# 产生Laplacian金字塔
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, dpt = la.shape
    ls = np.hstack((la[:, 0:cols // 2], lb[:, cols // 2:]))
    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[:, :cols // 2], B[:, cols // 2:]))

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、付费专栏及课程。

余额充值