OpenCV-Python教程:图像金字塔
原文链接: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)
扩展阅读:
- OpenCV-Python教程
OpenCV-Python教程:图像金字塔相关推荐
- OpenCV+python:图像金字塔
1,图像金字塔的概念 图像金字塔是一种以多分辨率来解释图像的有效但概念简单的结构.应用于图像分割,机器视觉和图像压缩.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图 ...
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...
- OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内
OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...
- openCV—Python(6)—— 图像算数与逻辑运算
openCV-Python(6)-- 图像算数与逻辑运算 一.函数简介 1.add-图像矩阵相加 函数原型:add(src1, src2, dst=None, mask=None, dtype=Non ...
- OpenCV python 提取图像内的三色
OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...
- opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)
教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...
- 计算机视觉OpenCV(五):图像金字塔与轮廓检测
目录 图像金字塔 1. 高斯金字塔(Gaussian Pyramid) 2. 拉普拉斯金字塔(Laplacian Pyramid) 图像轮廓 1. 查找检测物体的轮廓 2. 绘制轮廓 3. 轮廓特征 ...
- cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】图像金字塔
点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习Open ...
- OpenCV中的图像金字塔(高斯金字塔、拉普拉斯金字塔)
最近在看关于数字图像的知识点,目前在图像金字塔部分,实在是懒得用手作笔记了,就以其中比较出名的"高斯金字塔"和"拉普拉斯金字塔"为例,基于OpenCV的源代码作 ...
- OpenCV系列之图像金字塔 | 二十
目标 在本章中, 我们将学习图像金字塔 我们将使用图像金字塔创建一个新的水果"Orapple" 我们将看到以下功能:cv.pyrUp(),cv.pyrDown() 理论 通常,我们 ...
最新文章
- 常用javascript函数
- 2020年财富金字塔出炉,你距离高净值还有多远?
- 【数据结构与算法】之深入解析“修剪二叉搜索树”的求解思路与算法示例
- 关于互斥锁,条件变量的内核源码解析
- 吴裕雄--天生自然 物理学习与探索笔记:电功、电路以及欧姆定律
- c语言sin程序怎么写_用数控铣床加工六芒星,程序应该怎么写?
- 【今日CS 视觉论文速览】Part2, 16 Jan 2019
- c++ builder xe2 字符串转日期
- Linux内核学习路线 有入门到深入
- PMP-2.项目集、项目组合、项目运营和生命周期
- MacBook Pro 设置Finder显示隐藏文件
- 【软考笔记】1. 计算机原理与体系结构
- STM32CUBEIDE(15)----移植兆易创新SPI Nor Flash之GD25Q64Flash
- 小米MIUI降级刷机备份安装gms谷歌三件套
- dom绑定click事件无效及解决办法
- BDB 入门篇 第3章 DPL First Steps 直接持久层第一步
- 如何用java做一个桌面游戏
- java 斑马 打印不出来_java – Zebra打印机GC420t无法打印图像EPL 2 GW
- Automation服务器不能创建对象(金税盘)
- 选择图片横向拼接html,一些比较常见的几种组合多张图片的方式
热门文章
- 使用家庭宽带搭建服务器(含个人网盘) [一]-为什么要搭建自己的服务器?能实现公网访问?能实现NAS功能?能在线播放视频?
- Ubuntu安装字体for wps
- 北斗/GNSS在ROS机器人系统的应用
- qpython3下载不了_qpython3手机版
- Ubuntu修改/home下各目录为英文
- SpringBoot:整合Solr
- python ppt教程_python pptx复制指定页的ppt教程
- NDEF格式的smart tag智能标签(Mifrare Ultralight)在BlackBerry 9900手机中的使用
- 《大学》与威斯敏斯特大教堂的无名墓碑
- 墓碑上的字符C语言,墓碑上的故显考、故显妣、先考、先妣都是什么意思