- OpenCV Python 教程
- OpenCV Python - 首页
- OpenCV Python - 概述
- OpenCV Python - 环境配置
- OpenCV Python - 读取图像
- OpenCV Python - 写入图像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 图像属性
- OpenCV Python - 按位运算
- OpenCV Python - 形状和文本
- OpenCV Python - 鼠标事件
- OpenCV Python - 添加轨迹条
- OpenCV Python - 调整大小和旋转
- OpenCV Python - 图像阈值
- OpenCV Python - 图像滤波
- OpenCV Python - 边缘检测
- OpenCV Python - 直方图
- OpenCV Python - 颜色空间
- OpenCV Python - 图像变换
- OpenCV Python - 图像轮廓
- OpenCV Python - 模板匹配
- OpenCV Python - 图像金字塔
- OpenCV Python - 图像加法
- OpenCV Python - 图像混合
- OpenCV Python - 傅里叶变换
- OpenCV Python - 捕捉视频
- OpenCV Python - 播放视频
- OpenCV Python - 从视频中提取图像
- OpenCV Python - 从图像生成视频
- OpenCV Python - 人脸检测
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特征检测
- OpenCV Python - 特征匹配
- OpenCV Python - 数字识别
- OpenCV Python 资源
- OpenCV Python - 快速指南
- 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()
输出
广告