如何使用OpenCV进行图像缩放?
# OpenCV 图像缩放 完整教程(Python 版,极简好懂)
核心函数:**`cv2.resize()`**
## 一、函数语法
```python
cv2.resize(src, dsize, fx, fy, interpolation)
```
- `src`:原始图像
- `dsize`:目标尺寸 `(宽度, 高度)`
- `fx`:水平缩放比例
- `fy`:垂直缩放比例
- `interpolation`:插值算法(缩放画质)
---
## 二、方式1:指定固定宽高(精准缩放)
```python
import cv2
img = cv2.imread("test.jpg")
# 直接设置:宽400,高300
resized = cv2.resize(img, (400, 300))
cv2.imshow("origin", img)
cv2.imshow("resize", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
---
## 三、方式2:按比例缩放(推荐,不变形)
```python
img = cv2.imread("test.jpg")
# 宽高同时缩小为原来的 0.5 倍
resized = cv2.resize(img, None, fx=0.5, fy=0.5)
# 放大1.5倍
# resized = cv2.resize(img, None, fx=1.5, fy=1.5)
```
> 填 `None` 代表不手动指定尺寸,只用比例 `fx/fy`
---
## 四、方式3:等比例缩放(保留原图比例,常用)
```python
import cv2
img = cv2.imread("test.jpg")
h, w = img.shape[:2]
# 目标宽度
new_w = 500
# 计算等比例高度
scale = new_w / w
new_h = int(h * scale)
resized = cv2.resize(img, (new_w, new_h))
```
---
## 五、插值算法(控制缩放画质)
```python
# 缩小图片推荐
cv2.INTER_AREA
# 放大图片推荐
cv2.INTER_CUBIC
cv2.INTER_LINEAR # 默认
```
示例:
```python
resized = cv2.resize(img, (500,500), interpolation=cv2.INTER_AREA)
```
---
## 六、关键知识点总结
1. OpenCV 尺寸顺序:**(宽, 高)**,和 `shape` 的 `(高,宽)` 相反
2. 缩小用 `INTER_AREA`,清晰无锯齿
3. 放大用 `INTER_CUBIC`,更平滑
4. 想不变形 → 一定要**等比例计算**



