您好,登录后才能下订单哦!
# cv2.resize(img,(w, h))怎么使用
OpenCV是计算机视觉领域最流行的开源库之一,而`cv2.resize()`函数是图像处理中最基础且高频使用的功能。本文将全面解析该函数的使用方法、参数含义、注意事项以及实际应用场景。
## 一、函数基本语法
```python
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) → dst
常用简化形式:
resized_img = cv2.resize(img, (width, height))
src
:输入图像(numpy数组格式)dsize
:输出图像尺寸,格式为(宽, 高)
的元组fx
:水平轴缩放比例因子fy
:垂直轴缩放比例因子interpolation
:插值方法(默认为cv2.INTER_LINEAR
)尺寸顺序:OpenCV使用(宽度, 高度)
格式,与numpy数组的(高度, 宽度)
相反
“`python
resized = cv2.resize(img, (300, 200)) # 宽300,高200
# 常见错误 resized = cv2.resize(img, img.shape[:2]) # 错误!应改为(img.shape[1], img.shape[0])
2. **保持宽高比**的缩放示例:
```python
h, w = img.shape[:2]
new_width = 300
new_height = int(h * (new_width / w))
resized = cv2.resize(img, (new_width, new_height))
OpenCV提供多种插值算法,适用于不同场景:
插值方法 | 枚举值 | 适用场景 |
---|---|---|
最近邻插值 | cv2.INTER_NEAREST | 速度最快,质量低 |
双线性插值 | cv2.INTER_LINEAR | 默认选项,平衡速度质量 |
双三次插值 | cv2.INTER_CUBIC | 质量更好,速度较慢 |
Lanczos插值 | cv2.INTER_LANCZOS4 | 高质量放大 |
区域插值 | cv2.INTER_AREA | 缩小图像时效果最佳 |
# 高质量放大示例
large_img = cv2.resize(img, (800,600), interpolation=cv2.INTER_CUBIC)
# 缩小图像推荐
small_img = cv2.resize(img, (100,100), interpolation=cv2.INTER_AREA)
当使用fx
和fy
参数时,可以忽略dsize
参数(设为None
):
# 宽度放大2倍,高度缩小0.5倍
resized = cv2.resize(img, None, fx=2, fy=0.5)
import cv2
import numpy as np
# 读取图像
img = cv2.imread('input.jpg')
# 方法1:直接指定尺寸
resized1 = cv2.resize(img, (400, 300))
# 方法2:保持宽高比缩放
h, w = img.shape[:2]
aspect_ratio = w/h
new_height = 300
new_width = int(new_height * aspect_ratio)
resized2 = cv2.resize(img, (new_width, new_height))
# 方法3:使用比例因子
resized3 = cv2.resize(img, None, fx=0.5, fy=0.5)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Resized1', resized1)
cv2.imshow('Aspect Ratio', resized2)
cv2.imshow('Scaled', resized3)
cv2.waitKey(0)
cv2.destroyAllWindows()
现象:缩放后图像被拉伸或压缩 解决:计算原始宽高比并保持比例缩放
现象:放大图像后出现锯齿
解决:使用高质量插值方法(如INTER_CUBIC
)
对于视频处理等实时场景:
- 优先使用INTER_NEAREST
或INTER_LINEAR
- 考虑提前缓存缩放结果
深度学习预处理:
# 将输入图像缩放到模型要求尺寸
input_tensor = cv2.resize(img, (224,224)) / 255.0
缩略图生成:
thumbnail = cv2.resize(img, (128,128), interpolation=cv2.INTER_AREA)
多分辨率图像金字塔:
pyramid = [img]
for i in range(3):
pyramid.append(cv2.resize(pyramid[-1], None, fx=0.5, fy=0.5))
特性 | OpenCV | PIL.Image | skimage |
---|---|---|---|
速度 | 最快 | 中等 | 较慢 |
插值质量 | 优秀 | 优秀 | 优秀 |
多通道支持 | 完善 | 完善 | 完善 |
批处理能力 | 需循环 | 需循环 | 支持 |
cv2.resize()
是OpenCV中最基础的图像变换操作,使用时需特别注意:
1. 尺寸参数的宽高顺序
2. 根据场景选择合适的插值方法
3. 需要保持宽高比时的计算方法
掌握这些技巧后,你就能高效地处理各种图像缩放需求,为后续的计算机视觉任务打下良好基础。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。