导读
做图像处理的同学应该经常都会用到图像的缩放,我们都知道图片存储的时候其实就是一个矩阵,所以在对图像进行缩放操作的时候,也就是在对矩阵进行操作,如果想要将图片放大,这里我们就需要用到过采样算法来扩大矩阵,如果想要缩小图片就使用欠采样。

如上图所示,左图是原图像矩阵,右图是扩大后的图像矩阵,右图中的橙色点表示的是矩阵扩大之后通过插值算法填充的像素值。所以,这篇文章我们主要探讨的就是如何来通过插值算法来填充像素值
相关函数介绍
在opencv中提供了一个resize函数用来调整图像的大小,里面提供了好几种不同的插值算法,如下图所示

这里我们主要介绍最常用的前5中插值算法,最后两种插值算法主要是应用在仿射变换中,cv.WARP_FILL_OUTLIERS在从src到dst变换的时候可能会出现异常值,通过这个设定可以将异常值的像素置0。而cv.WARP_INVERSE_MAP是应用在仿射变换的逆变换,从dst到src的变换,关于仿射变换的更多资料可以参考我的上篇文章一文搞懂仿射变换
插值算法效果对比

我们通过随机生成一个5×5的图片,然后通过不同的插值算法将其放大10倍之后,来对比最终图片的效果。

如果大家觉得灰度图不方便观察,我们可以通过设置plt.imshow的cmap参数来控制颜色,matplotlib提供了几种不同的类别的色彩映射方式
cmap的类别
- Sequential
通常使用单一的色调,逐渐增加亮度和颜色,可以用来表示有序的信息

通过 改变两种不同的颜色的亮度和饱和度,在 中间以