OpenCV 从零学习 · 第 13 讲:图像金字塔
函数:cv2.pyrDown / cv2.pyrUp | 难度:★☆☆☆☆
金字塔就是把图像层层缩小(或放大)形成的一座"塔":底层是清晰原图,越往上越小越糊。它的价值在于多尺度处理——很多算法(模板匹配、特征检测)在"缩小的图"上跑更快、更稳,还能应对目标大小变化。
一、下采样 pyrDown(缩小一半)
dst = cv2.pyrDown(src)
先高斯模糊再隔点采样,输出尺寸约为输入的 1/2(宽高都减半)。是"高斯金字塔"的标准构建方式。
二、上采样 pyrUp(放大一倍)
dst = cv2.pyrUp(src)
尺寸翻倍(宽高各 ×2),但放大的是"模糊版"——pyrUp 并不能把 pyrDown 丢失的细节找回来,只是把图拉大、插值变糊。
场景 A · 多尺度模板匹配(接第 12 讲)
目标大小不固定时,把大图和模板都按金字塔逐层缩小,在每一层做
目标大小不固定时,把大图和模板都按金字塔逐层缩小,在每一层做
matchTemplate,再把匹配结果映射回原图尺度。这样无论目标是大是小都能找到——这是工业"找图"应对分辨率差异的核心技巧。
场景 B · 提速大图处理
一张 4000×3000 的图做边缘/特征检测很慢。先
一张 4000×3000 的图做边缘/特征检测很慢。先
pyrDown 两层变成 1000×750,在缩小图上处理,速度提升 16 倍,多数任务精度够用。
import cv2
img = cv2.imread('big.jpg')
small1 = cv2.pyrDown(img) # 1/2
small2 = cv2.pyrDown(small1) # 1/4
big = cv2.pyrUp(small2) # 放大回,但比原图糊
⚠ 新手必踩坑
pyrUp是有损放大:它会变模糊,不是"高清还原"。不要指望 pyrDown 后再 pyrUp 能无损复原。- 每层尺寸严格减半,只有偶数尺寸能干净地往下走;奇数宽高会被裁掉一行/列,循环多层后位置会漂移,做精确定位时要记好缩放倍数(2^n)。
- 金字塔本身不"做事",它是给别的算法当多尺度脚手架用的。
本讲要点
- pyrDown 缩小一半(先模糊后采样);pyrUp 放大一倍(放大即模糊)。
- 核心价值是多尺度:应对目标大小变化、加速大图处理。
- pyrUp 不复原细节;善用 2^n 缩放倍数做坐标回映射。
下一讲:第 14 讲 · 特征点检测与匹配(角点 / ORB / SIFT)——比模板匹配更鲁棒,能在旋转、尺度变化下"认出"同一物体,是图像拼接、物体识别的基础。
