OpenCV Python 如何使用图像金字塔混合图像

OpenCV Python 如何使用图像金字塔混合图像

我们可以使用高斯和拉普拉斯图像金字塔来混合图像。高斯金字塔是一种图像金字塔。为了创建一个 高斯金字塔 ,OpenCV提供了两个函数 cv2.pyrDown()cv2.pyrUp() 。我们可以从 高斯金字塔 中生成 拉普拉斯金字塔 。在拉普拉斯金字塔中,图像只看起来像边缘图像。拉普拉斯金字塔中的一级是由高斯金字塔中该级别与其上一级的扩展版本之间的差异形成的。

步骤

要使用图像金字塔混合图像,我们可以按照以下步骤进行:

  • 导入所需的库 OpenCVNumPy 。确保您已经安装了它们。

  • 使用 cv2.imread() 方法读取两个输入图像 AB 。指定完整的图像路径。将图像调整为尺寸为(512,512)。

  • 为两个输入图像 AB 生成高斯金字塔。

  • 使用高斯金字塔,为两个输入图像 AB 生成拉普拉斯金字塔。

  • 在拉普拉斯金字塔的每个级别中,将第一个图像的左半部分和第二个图像的右半部分相加。

  • 混合和重建图像。显示混合后的图像。

让我们看一些示例以更清楚地理解。

输入图像

我们将使用以下图像作为下面示例中的输入文件。

OpenCV Python 如何使用图像金字塔混合图像

OpenCV Python 如何使用图像金字塔混合图像

示例

在这个示例中,我们使用图像金字塔来混合两个输入图像。

import cv2
import numpy as np,sys
A = cv2.imread('car.jpg')
B = cv2.imread('blue-car.jpg')
A = cv2.resize(A, (512, 512))
B = cv2.resize(B, (512, 512))

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

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

# generate Laplacian Pyramid for A
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)

# generate Laplacian Pyramid for B
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)

# Now add left and right halves of images in each level
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)

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

# image with direct connecting each half
real = np.hstack((A[:,:cols//2],B[:,cols//2:]))
cv2.imshow('Pyramid_blending.jpg',ls_)
cv2.waitKey(0)
cv2.imshow('Direct_blending.jpg',real)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

上面的程序在执行时,将产生以下两个输出窗口 –

OpenCV Python 如何使用图像金字塔混合图像

OpenCV Python 如何使用图像金字塔混合图像

第一个窗口显示使用图像金字塔进行图像混合,第二个窗口显示直接图像混合。请注意上述两个图像之间的区别。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程