如何使用Python的OpenCV在图像中找到Laplacian金字塔?
我们可以从高斯金字塔形成Laplacian金字塔。OpenCV不提供构建Laplacian金字塔的特定函数。
在Laplacian金字塔中,图像看起来只像边缘图像。 Laplacian金字塔用于图像压缩以及图像增强中。
Laplacian金字塔中的一级由高斯金字塔中该级别与高斯金字塔中其上一级的扩展版本之间的差异形成。
要创建高斯金字塔中的级别,我们应用 cv2.pyrDown() 或 cv2.pyrUp() 函数。
步骤
要构造三层Laplacian金字塔,请按照以下步骤进行 –
- 导入所需的库。
-
加载输入图像。
-
然后使用三个级别构建高斯金字塔。
-
对于Laplacian金字塔,级别是由高斯金字塔中该级别与其上一级的扩展版本之间的差异形成的。高斯金字塔中的最后一层在Laplacian金字塔中保持不变。
-
重复第4步,以构建Laplacian金字塔的所有级别。
-
创建窗口以显示所有图层并显示它们。
示例
在下面的Python3程序中,我们创建了一个三层的Laplacian金字塔输入图像car.jpg。
import cv2
# 加载图片
img = cv2.imread('car.jpg')
lower = img.copy()
# 创建高斯金字塔
gaussian_pyr = [lower]
for i in range(3):
lower = cv2.pyrDown(lower)
gaussian_pyr.append(lower)
# 高斯金字塔中的最后一层在拉普拉斯金字塔中保持不变
laplacian_top = gaussian_pyr[-1]
# 创建拉普拉斯金字塔
laplacian_pyr = [laplacian_top]
for i in range(3,0,-1):
size = (gaussian_pyr[i - 1].shape[1], gaussian_pyr[i - 1].shape[0])
gaussian_expanded = cv2.pyrUp(gaussian_pyr[i], dstsize=size)
laplacian = cv2.subtract(gaussian_pyr[i-1], gaussian_expanded)
laplacian_pyr.append(laplacian)
# 创建三个窗口以显示三层图像
cv2.namedWindow('Layer 1', cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('Layer 2', cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('Layer 3', cv2.WINDOW_AUTOSIZE)
# 显示所有三个图层
cv2.imshow('Layer 1',laplacian_pyr[3])
cv2.imshow('Layer 2',laplacian_pyr[2])
cv2.imshow('Layer 3',laplacian_pyr[1])
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
在执行以上代码后,它会打开 三个输出窗口 ,每个窗口都显示拉普拉斯金字塔中的特定层。
注意,Layer 2 图像是 Layer 1 图像的四分之一。同样,Layer 3 图像是 Layer 2 图像的四分之一。