原文链接:http://www.juzicode.com/opencv-python-pyrup-pyrdown

返回Opencv-Python教程

图像金字塔是一系列图像的集合,就如下图所示,更高层图像尺寸更小,更底层图像尺寸更大,看起来就像一个金字塔一样:

图源:docs.opencv.org

1、pyrDown

这里的down是指图像变小,所以原始图像在金字塔的底部。

首先将当前层的图像和下面这个高斯核卷积:

这个高斯核的尺寸为5×5大小,所有元素的值加起来正好为256,最后再除以256,得到的加权和正好为1。其距离最中心越近数值越大,这正好和高斯平滑选择的高斯核类似。这个过程也类似于高斯平滑,从后面的例子也可以看到经过pyrDown()处理的图像变得更加模糊(平滑)。然后移除偶数行和偶数列,然后就能得到和原图相比是原图1/4大小的新的图像,在图像金字塔中就位于当前层的上一层。

接口形式:

cv2.pyrDown(src[, dst[, dstsize[, borderType]]]) ->dst 
  • 参数含义:
  • src:源图像;
  • dst:目标图像;
  • dstsize:缩放后目标图像的尺寸,必须满足std::abs(dsize.width*2 – ssize.width) <= 2 && std::abs(dsize.height*2 – ssize.height) <= 2
  • borderType:边界填充类型;

下面的例子中连续3次进行pyrDown:

import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)img = cv2.imread('..\\messi5.jpg')
img_down = cv2.pyrDown(img,dstsize=(img.shape[1]//2,img.shape[0]//2))
img_down2 = cv2.pyrDown(img_down,dstsize=(img_down.shape[1]//2,img_down.shape[0]//2))
img_down3 = cv2.pyrDown(img_down2,dstsize=(img_down2.shape[1]//2,img_down2.shape[0]//2))
print('img.shape',img.shape)
print('img_down.shape',img_down.shape)
print('img_down2.shape',img_down2.shape)
print('img_down3.shape',img_down3.shape)
cv2.imshow('img',img)
cv2.imshow('img_down',img_down)
cv2.imshow('img_down2',img_down2)
cv2.imshow('img_down3',img_down3)
cv2.waitKey(0)

运行结果:

VX公众号: 桔子code / juzicode.com
cv2.__version__: 4.5.3
img.shape (342, 548, 3)
img_down.shape (171, 274, 3)
img_down2.shape (85, 137, 3)
img_down3.shape (42, 68, 3)

2、pyrUp

这里的up是指将图像的尺寸变大,所以原始图像位于图像金字塔的顶层。

首先将当前层图像的宽高扩大2倍,插入的行和列位于偶数行或偶数列,这些位置填充数值0;然后用和pyrDown一样的kernel和当前层的图像卷积,填充到刚才插入的行列中。

接口形式:

cv2.pyrUp(src[, dst[, dstsize[, borderType]]]) ->dst
  • 参数含义:
  • src:源图像;
  • dst:目标图像;
  • dstsize:缩放后目标图像的尺寸,必须满足std::abs(dsize.width – ssize.width*2) == dsize.width % 2 && std::abs(dsize.height – ssize.height*2) == dsize.height % 2
  • borderType:边界填充类型;

下面的例子中连续3次进行pyrUp,为了显示方便,这里原图用resize()进行了缩小:

import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)img = cv2.imread('..\\messi5.jpg')
img = cv2.resize(img,None,fx=0.15,fy=0.15)#为了观察方便缩小原图
img_up = cv2.pyrUp(img,dstsize=(2*img.shape[1],2*img.shape[0]))
img_up2 = cv2.pyrUp(img_up,dstsize=(2*img_up.shape[1],2*img_up.shape[0]))
img_up3 = cv2.pyrUp(img_up2,dstsize=(2*img_up2.shape[1],2*img_up2.shape[0]))
print('img.shape',img.shape)
print('img_up.shape',img_up.shape)
print('img_up2.shape',img_up2.shape)
print('img_up3.shape',img_up3.shape)
cv2.imshow('img',img)
cv2.imshow('img_up',img_up)
cv2.imshow('img_up2',img_up2)
cv2.imshow('img_up3',img_up3)
cv2.waitKey(0)

运行结果:

VX公众号: 桔子code / juzicode.com
cv2.__version__: 4.5.3
img.shape (51, 82, 3)
img_up.shape (102, 164, 3)
img_up2.shape (204, 328, 3)
img_up3.shape (408, 656, 3)

扩展阅读:

  1. OpenCV-Python教程

OpenCV-Python教程:图像金字塔相关推荐

  1. OpenCV+python:图像金字塔

    1,图像金字塔的概念 图像金字塔是一种以多分辨率来解释图像的有效但概念简单的结构.应用于图像分割,机器视觉和图像压缩.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图 ...

  2. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

  3. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  4. openCV—Python(6)—— 图像算数与逻辑运算

    openCV-Python(6)-- 图像算数与逻辑运算 一.函数简介 1.add-图像矩阵相加 函数原型:add(src1, src2, dst=None, mask=None, dtype=Non ...

  5. OpenCV python 提取图像内的三色

    OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...

  6. opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)

    教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...

  7. 计算机视觉OpenCV(五):图像金字塔与轮廓检测

    目录 图像金字塔 1. 高斯金字塔(Gaussian Pyramid) 2. 拉普拉斯金字塔(Laplacian Pyramid) 图像轮廓 1. 查找检测物体的轮廓 2. 绘制轮廓 3. 轮廓特征 ...

  8. cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】图像金字塔

    点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习Open ...

  9. OpenCV中的图像金字塔(高斯金字塔、拉普拉斯金字塔)

    最近在看关于数字图像的知识点,目前在图像金字塔部分,实在是懒得用手作笔记了,就以其中比较出名的"高斯金字塔"和"拉普拉斯金字塔"为例,基于OpenCV的源代码作 ...

  10. OpenCV系列之图像金字塔 | 二十

    目标 在本章中, 我们将学习图像金字塔 我们将使用图像金字塔创建一个新的水果"Orapple" 我们将看到以下功能:cv.pyrUp(),cv.pyrDown() 理论 通常,我们 ...

最新文章

  1. 常用javascript函数
  2. 2020年财富金字塔出炉,你距离高净值还有多远?
  3. 【数据结构与算法】之深入解析“修剪二叉搜索树”的求解思路与算法示例
  4. 关于互斥锁,条件变量的内核源码解析
  5. 吴裕雄--天生自然 物理学习与探索笔记:电功、电路以及欧姆定律
  6. c语言sin程序怎么写_用数控铣床加工六芒星,程序应该怎么写?
  7. 【今日CS 视觉论文速览】Part2, 16 Jan 2019
  8. c++ builder xe2 字符串转日期
  9. Linux内核学习路线 有入门到深入
  10. PMP-2.项目集、项目组合、项目运营和生命周期
  11. MacBook Pro 设置Finder显示隐藏文件
  12. 【软考笔记】1. 计算机原理与体系结构
  13. STM32CUBEIDE(15)----移植兆易创新SPI Nor Flash之GD25Q64Flash
  14. 小米MIUI降级刷机备份安装gms谷歌三件套
  15. dom绑定click事件无效及解决办法
  16. BDB 入门篇 第3章 DPL First Steps 直接持久层第一步
  17. 如何用java做一个桌面游戏
  18. java 斑马 打印不出来_java – Zebra打印机GC420t无法打印图像EPL 2 GW
  19. Automation服务器不能创建对象(金税盘)
  20. 选择图片横向拼接html,一些比较常见的几种组合多张图片的方式

热门文章

  1. 使用家庭宽带搭建服务器(含个人网盘) [一]-为什么要搭建自己的服务器?能实现公网访问?能实现NAS功能?能在线播放视频?
  2. Ubuntu安装字体for wps
  3. 北斗/GNSS在ROS机器人系统的应用
  4. qpython3下载不了_qpython3手机版
  5. Ubuntu修改/home下各目录为英文
  6. SpringBoot:整合Solr
  7. python ppt教程_python pptx复制指定页的ppt教程
  8. NDEF格式的smart tag智能标签(Mifrare Ultralight)在BlackBerry 9900手机中的使用
  9. 《大学》与威斯敏斯特大教堂的无名墓碑
  10. 墓碑上的字符C语言,墓碑上的故显考、故显妣、先考、先妣都是什么意思