使用Python和OpenCV的图像金字塔

  • 1. 效果图
  • 2. 什么是图像金字塔?
  • 3. 依赖
  • 4. 源码
  • 参考

这篇博客将介绍如何使用两种方法构造图像金字塔。

  1. 使用Python和OpenCV构建金字塔,此方法不会在金字塔的每一层使用高斯平滑图像,因此更适合与HOG描述符一起使用。

  2. 使用Python + scikit-image构建金字塔,在金字塔的每一层都应用高斯平滑。

应该使用哪种方法?——取决于应用程序。如果将HOG描述符用于对象分类,则使用第一种方法,因为平滑会损害分类性能。

如果要实施SIFT或高斯差分关键点检测器之类的方法,则使用第二种方法(或至少将平滑方法纳入第一种方法)。

1. 效果图

法一:未进行高斯平滑的金字塔效果图:

使用高斯平滑的图像金字塔效果图如下:可能因为scikit-image版本 0.17.1原因,不支持彩色图~~
可以看到高斯平滑的金字塔比不使用高斯平滑的级别少,这是因为高斯平滑的以1/2层级降,更快;

当设置不同的scale级别时,俩种方式能生成的级别也不一致,可以尽情试试。

2. 什么是图像金字塔?


如上图所示,图像金字塔”是图像的多尺度表示。最下面的图拥有原始的图像宽度、高度,每上一层,图像的宽度与高度分别为之前的一半,并且进行了高斯平滑模糊等操作。

利用图像金字塔,可以在图像的不同比例下找到图像中的对象。当与滑动窗口结合使用时,可以在各个位置的图像中找到对象。

在金字塔的底部是原始图像的原始大小(宽度和高度)。并在每个随后的层上调整图像大小(二次采样)并可选地平滑(通常通过高斯模糊)。

逐步对图像进行二次采样,直到满足某个停止标准为止,该标准通常已达到最小尺寸,并且无需进行进一步的二次采样。

通常,性能和生成的层数之间需要权衡。比例因子越小,则需要创建和处理的图层就越多-但这也使图像分类器有更好的机会定位要在图像中检测的对象。

较大的比例因子将产生较少的图层,并且可能会损害对象的分类性能。但是,由于要处理的层数较少,因此可以获得更高的性能。

3. 依赖

  • imutils
  • scikit-image 安装可参考

4. 源码

# 图像金字塔的俩种方法
# USAGE
#  python pyramid.py --image images/_L3A4387.jpg --scale 1.5# 导入必要的包
import argparse
import imutils
import cv2from skimage.transform import pyramid_gaussian  # 导入scikit图像pyramid_gaussian函数# 构建金字塔
# - minSize 图层所需的最小宽度和高度
def pyramid(image, scale=1.5, minSize=(30, 30)):# 产生原始图像yield image# 保持循环金字塔模式while True:# 计算图像新的规模大小,并保留宽高比的缩放图像w = int(image.shape[1] / scale)image = imutils.resize(image, width=w)# 如果金字塔中的图像低于此最小尺寸,将不再构建图像金字塔# 停止循环if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:break# 产生金字塔的下一张图像yield image# 构建命令行参数及解析
# --image 原始图像路径
# --scale 控制在金字塔中调整图像大小的比例因子
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
ap.add_argument("-s", "--scale", type=float, default=1.5, help="scale factor size")
args = vars(ap.parse_args())# 加载图像
image = cv2.imread(args["image"])
image = imutils.resize(image, width=800)# 法一: 不平滑,只是缩放图像
# 遍历图像金字塔
for (i, resized) in enumerate(pyramid(image, scale=args["scale"])):# 展示金字塔图像结果cv2.imshow("Layer {}".format(i + 1), resized)cv2.waitKey(0)
# 关闭所有打开的窗口
cv2.destroyAllWindows()# 法二: 缩放+高斯平滑
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
for (i, resized) in enumerate(pyramid_gaussian(image, downscale=2)):# 如果图像太小,则停止缩放if resized.shape[0] < 30 or resized.shape[1] < 30:break# 展示金字塔图像结果cv2.imshow("pyramid_gaussian Layer {}".format(i + 1), resized)cv2.waitKey(0)

参考

  • https://www.pyimagesearch.com/2015/03/16/image-pyramids-with-python-and-opencv/

使用Python和OpenCV构建图像金字塔相关推荐

  1. 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

    使用Python,OpenCV制作图像Mask--截取ROIs及构建透明的叠加层 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只 ...

  2. Python+OpenCV:图像金字塔

    Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...

  3. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克

    使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...

  4. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  5. 使用Python,OpenCV查找图像中的最亮点

    Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...

  6. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

  7. 使用Python、OpenCV翻转图像(水平、垂直、水平垂直翻转)

    使用Python.OpenCV翻转图像(水平.垂直.水平垂直翻转) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python.OpenCV翻转图像,类似于cv2.rotate(). 沿y轴水 ...

  8. 使用Python,OpenCV计算图像直方图(cv2.calcHist)

    使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...

  9. 使用Python,OpenCV进行图像平移转换

    使用Python,OpenCV进行图像平移转换 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV对图像进行平移转换.平移是图像沿x轴和y轴的移动.使用平移, ...

最新文章

  1. Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)
  2. 【驱动】GPIO寄存器配置总结
  3. 网站更换服务器ip地教程,由于服务器更换IP地址,服务器不更换。需要如何操作使网站正常运行呢?,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
  4. 让你不再害怕指针(一)
  5. 优化 最长上升子序列_LIS - 最长上升子序列 (二分优化)
  6. php表示私有变量的是,PHP 访问私有和受保护的成员变量
  7. docker privileged作用_docker总结
  8. Multi-Architecture镜像制作指南已到,请查收!
  9. 轻量级区块链协议Mina推出对抗性测试网“Testworld”
  10. 激活策略 查询_苹果手机未激活也可能不是原装货,激活过的手机到底能不能买?...
  11. python的基本语法while true_Python正课15 —— 流程控制之while循环
  12. 宝贵的核心珍藏_建立成功的神经网络的10个宝贵技巧
  13. Ubuntu论坛遭到入侵 用户数据泄露
  14. window.print react+antd 分页打印 去掉页眉页脚
  15. 政务云迁移服务项目预算制定
  16. 在企业访客管理中引入人脸识别系统有哪些应用?
  17. 计算机网络-----TCP三次握手相关面试题扩展
  18. 企业IT管理员IE11升级指南【8】—— Win7 IE8和Win7 IE11对比
  19. Eugene Fama —— 一段 50 年的传奇
  20. 操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

热门文章

  1. DCN-2655 ssh 远程登陆配置
  2. android studio导入第三方库和demo
  3. php引入PHPMailer发送邮件
  4. android h5弹窗,Android嵌套html5页面中alert 弹出框问题
  5. 3种常见的linux版本,查看linux版本的三种常用方法
  6. Python2 与 Python3 共存,pip2 与 pip3 共存切换设置
  7. Eclipse中10个最有用的快捷键组合
  8. 基础知识:页面div始终浮在浏览器顶部
  9. Linux——Linux概念架构的理解
  10. [leetcode] Minimum Path Sum