如何使用Python中的OpenCV查詢影像的高斯金字塔?


在許多情況下,我們需要處理同一影像的不同解析度和大小。在影像金字塔的概念中,我們找到具有不同解析度和大小的原始影像。高斯金字塔是一種影像金字塔。

為了找到**高斯金字塔**,**OpenCV** 提供了兩個函式 **cv2.pyrDown()** 和 **cv2.pyrUp()**。

  • 函式 **cv2.pyrDown()** 透過去除輸入影像中連續的行和列來降低解析度。輸出影像的寬度和高度變為輸入影像的一半,面積減小到四分之一。

  • 函式 **cv2.pyrUp()** 透過新增輸入影像中連續的行和列來提高解析度。輸出影像的寬度和高度變為輸入影像的兩倍,面積增加到四倍。

我們可以透過向下或向上分層來建立高斯金字塔。要建立向下分層的高斯金字塔,我們應用 **cv2.pyrDown()** 函式。而在建立向上分層的高斯金字塔時,我們應用 **cv2.pyrUp()** 函式。

在建立高斯金字塔時,原始影像被設定為基影像。可以使用這兩個函式找到更高層。

示例 1

在這個例子中,我們建立了一個三層高斯金字塔。我們使用 **cv.pyrDown()** 向下分層兩次。

# import the required libraries import cv2 # Load the image. it is the level 1 of Gaussian Pyramid img = cv2.imread('car.jpg') # obtain level 2 image (decrease the resolution) pyramid1 = cv2.pyrDown(img) # obtain level 3 image of Gaussian Pyramid (decrease the resolution) pyramid2 = cv2.pyrDown(pyramid1) # define three windows to display three Level images 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) # Display all the level images cv2.imshow('Layer 1', img) cv2.imshow('Layer 2', pyramid1) cv2.imshow('Layer 3', pyramid2) cv2.waitKey(0) cv2.destroyAllWindows()

我們將使用以下影像“**car.jpg**”作為上述程式程式碼中的輸入檔案。

輸出

執行後,它將生成以下輸出視窗。

上述輸出顯示較高層(例如第 2 層)的解析度是較低層(例如第 1 層)解析度的一半。同樣,第 3 層的解析度是第 2 層解析度的一半。

**注意** - 上述獲得的第 3 層輸出影像用作以下示例 2 的輸入。

示例 2

在這個例子中,我們透過向上分層建立了一個三層高斯金字塔。我們使用 **cv2.pyrUp()** 向上分層兩次。

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()

輸出

執行上述程式碼後,它將生成以下輸出視窗。

上述輸出顯示較高層(例如第 2 層)的解析度是較低層(例如第 1 層)解析度的兩倍。同樣,第 3 層的解析度是第 2 層解析度的兩倍。

注意示例 1 中的輸入影像與示例 2 輸出中的第 3 層影像之間的區別。

更新於:2022年9月28日

1K+ 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告