OpenCV Python 图像金字塔

OpenCV Python 图像金字塔

有时候,我们可能需要将一幅图像转换为与其原始大小不同的尺寸。为此,您可以对图像进行放大(缩小)或缩小(放大)。

图像金字塔是一组图像(由单个原始图像构成),按照指定的次数进行逐渐降采样。

高斯金字塔用于对图像进行降采样,而拉普拉斯金字塔则从金字塔中分辨率较低的图像重建上采样图像。

将金字塔视为一组层。以下是该图像的示例−

OpenCV Python 图像金字塔

金字塔的上层图像尺寸较小。为了生成高斯金字塔中下一层的图像,我们将低一级图像与高斯核进行卷积。

\frac{1}{16}\begin{bmatrix}1&4&6&4&1 \4&16&24&16&4 \6&24&36&24&6 \4&16&24&16&4 \1&4&6&4&1\end{bmatrix}

现在去掉每一偶数行和列。结果图像将是前一图像的面积的1/4。对原始图像重复此过程即可生成整个金字塔。

为了使图像变大,用零填充列。首先,将图像在每个维度上放大为两倍大小,然后对新的偶数行进行卷积,以近似缺失像素的值。

函数 cv.pyrUp() 将原始尺寸增大一倍, cv.pyrDown() 函数将其缩小为一半。

示例

下面的程序根据用户输入的“I”或“o”调用pyrUp()和pyrDown()函数。

请注意,当我们缩小图像的尺寸时,图像的信息会丢失。一旦我们缩小并且重新调整为原始尺寸,我们会丢失一些信息,并且新图像的分辨率远远低于原始图像。

import sys
import cv2 as cv

filename = 'chicky_512.png'

src = cv.imread(filename)

while 1:
   print ("press 'i' for zoom in 'o' for zoom out esc to stop")
   rows, cols, _channels = map(int, src.shape)
   cv.imshow('Pyramids', src)
   k = cv.waitKey(0)

   if k == 27:
      break

   elif chr(k) == 'i':
      src = cv.pyrUp(src, dstsize=(2 * cols, 2 * rows))

   elif chr(k) == 'o':
      src = cv.pyrDown(src, dstsize=(cols // 2, rows // 2))

cv.destroyAllWindows()

输出结果

OpenCV Python 图像金字塔

OpenCV Python 图像金字塔

OpenCV Python 图像金字塔

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程