按照cv2包中函数cv2.resize():
def resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None):
interpolation的插值方式有6种:
中文名 | 常量名 | 备注 |
---|---|---|
最近邻插值 | INTER_NEAREST | |
双线性插值 | INTER_LINEAR | 默认 放大推荐 |
双三次插值 | INTER_CUBIC | 放大推荐(较慢) |
局部像素重采样 | INTER_AREA | 缩小推荐, 放大相当于NEAREST |
8x8像素LANCZOS插值 | INTER_LANCZOS4 | |
INTER_LINEAR_EXACT | INTER_LINEAR_EXACT |
在看插值之前先看一个公式,源图像与目标图像坐标间的转换公式。
如果源图像大小为(m, n),目标图像大小为(a, b),那么目标图像坐标(i, j)对应于源图像坐标(im/a, jn/b)
- 最近邻插值
最简单的一种插值方法,未知像素的值为和该像素位置最接近的位置处像素的值。
缺点:灰度值发生变化时,出现锯齿现象。 - 双线性插值
在x和y轴两个方向上分别插值。不分先后顺序。
如下图,假设红点已知,求绿点。
先在x方向上做插值,求出R1和R2,然后再y轴方向上做插值求出P即可。
插值公式: