图像的上采样(放大)和降采样(缩小)是图像处理中调整尺寸的基础操作,OpenCV 通过图像金字塔相关 API(pyrUp/pyrDown)可快速实现,本文用极简代码演示核心用法,新手秒会。
核心代码实现
python
import cv2 as cv
import numpy as np
# 1. 读取图像并校验
src = cv.imread(".\image\6.bmp")
if src is None:
print('could not load image')
exit()
cv.imshow("src", src) # 显示原图
# 2. 上采样(pyrUp):图像尺寸翻倍(宽/高各×2)
res = cv.pyrUp(src)
# 3. 降采样(pyrDown):图像尺寸减半(宽/高各÷2)
resd = cv.pyrDown(src)
# 4. 显示采样结果
cv.imshow('outimage1(降采样)', resd)
cv.imshow('outimage(上采样)', res)
cv.waitKeyEx(0) # 支持特殊按键响应,等价于waitKey(0)
cv.destroyAllWindows()
关键知识点解析
1. 采样核心逻辑
| 操作类型 | 核心 API | 效果 | 适用场景 |
|---|---|---|---|
| 上采样(放大) | cv.pyrUp() |
图像宽度、高度均翻倍,像素插值填充 | 细节放大、小目标可视化 |
| 降采样(缩小) | cv.pyrDown() |
图像宽度、高度均减半,高斯滤波后下采样 | 降低计算量、去除高频噪点 |
2. 重要注意事项
- 不可逆性 :
pyrDown不是pyrUp的逆操作!降采样会丢失图像高频细节,即使对降采样后的图像执行上采样,也无法恢复原始细节; - 尺寸要求:图像尺寸最好为 2 的幂次(如 256×256、512×512),否则多次采样后可能出现尺寸异常(如非整数尺寸);
- 滤波特性 :
pyrDown执行时会先对图像做高斯滤波,再剔除偶数行 / 列,因此降采样同时具备轻微去噪效果。
3. 扩展技巧
- 精准控尺寸:若需指定具体尺寸,可改用
cv.resize()(如cv.resize(src, (800, 600))),pyrUp/pyrDown 仅支持倍数缩放; - 多次采样:可嵌套调用(如
cv.pyrUp(cv.pyrUp(src)))实现 4 倍放大,需注意多次放大后图像会模糊; - 对比显示:采样后可通过
cv.hconcat/cv.vconcat将原图与采样图拼接,直观对比效果。
总结
- 上采样(pyrUp)是图像尺寸翻倍放大,降采样(pyrDown)是尺寸减半缩小,均基于高斯金字塔实现;
- 降采样不可逆,会丢失细节,兼具轻微去噪效果;
- 倍数缩放用 pyrUp/pyrDown,精准尺寸调整用 cv.resize ()。