如何使用OpenCV在Python中找到一张图像的高斯金字塔?

如何使用OpenCV在Python中找到一张图像的高斯金字塔?

在许多情况下,我们需要处理同一图像的不同分辨率和大小。在图像金字塔的概念中,我们可以找到具有不同分辨率和大小的原始图像的图像。高斯金字塔是一种图像金字塔。

要找到一个 高斯金字塔OpenCV 提供了两个函数 cv2.pyrDown()cv2.pyrUp()

  • 函数 cv2.pyrDown() 减小输入图像中相邻行和列的分辨率。输出图像的宽度和高度变为输入图像的一半,其面积减小至四分之一。

  • 函数 cv2.pyrUp() 通过在输入图像中添加相邻的行和列来增加分辨率。输出图像的宽度和高度为输入图像的两倍,其面积增加四倍。

我们可以通过等级降低或等级提高来创建高斯金字塔。要创建等级降低的高斯金字塔,我们应用 cv2.pyrDown() 函数。创建等级提高的高斯金字塔时,应用 cv2.pyrUp() 函数。

在创建高斯金字塔时,原始图像被设置为基本图像。可以使用这两个函数找到更高的层。

示例1

在本例中,我们创建了一个3层的高斯金字塔。我们使用 cv.pyrDown() 进行两次等级下降。

# 导入必要的库
import cv2

# 加载图像,它是高斯金字塔的第一层
img = cv2.imread('car.jpg')

# 获取高斯金字塔的第二层图像(分辨率下降)
pyramid1 = cv2.pyrDown(img)

# 获取第三层高斯金字塔图像(分辨率下降)
pyramid2 = cv2.pyrDown(pyramid1)

# 定义三个窗口以显示三个层图像
cv2.imwrite('pyramid2.jpg', pyramid2)
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', img)
cv2.imshow('Layer 2', pyramid1)
cv2.imshow('Layer 3', pyramid2)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们将使用下面的图像 ” car.jpg ” 作为上述程序代码中的输入文件。

如何使用OpenCV在Python中找到一张图像的高斯金字塔?

输出

运行程序后,将产生以下输出窗口。

如何使用OpenCV在Python中找到一张图像的高斯金字塔?

以上输出显示,较高级别的分辨率(如“Layer 2”)是较低级别分辨率(如“Layer 1”)的一半。同样,第三层的分辨率是第二层的一半。

注意 − 上述 Layer 3 的输出图像用作下面示例2中的输入。

示例2

在这个例子中,我们使用 cv2.pyrUp() 函数进行了三层高斯金字塔向上采样过程。我们使用了两次上采样(Level up)。

import cv2
img = cv2.imread('pyramid2.jpg')

pyr1 = cv2.pyrUp(img)
pyr2 = cv2.pyrUp(pyr1)

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', img)
cv2.imshow('Layer 2', pyr1)
cv2.imshow('Layer 3', pyr2)

cv2.waitKey(0)
cv2.destroyAllWindows()

输出

在执行上述代码时,将产生以下输出窗口。

如何使用OpenCV在Python中找到一张图像的高斯金字塔?

上述输出显示,较高层级(即Layer 2)的分辨率是较低层级(如Layer 1)的两倍。同样,Layer 3的分辨率是Layer 2的两倍。

请注意Example 1中的输入图像和Example 2的输出中的Layer 3图像之间的差异。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV