opencv使用函数cv2.resize()进行图像缩放的时候,默认使用使用的插值方式是双线性插值(cv2.INTER_LINEAR)。
我们知道,FCN是在用双线性插值的方式来初始化反卷积的卷积核。所以在这里补充一下。但是其他论文很少用这种方式。代码放在这里,能跑通。自己用不用都行,会调用就行了 。想深究的可以自己来。
这里提供了两个双线性插值的用法:(1)使用双线性差值法resize一张图片,也就是opencv里的图像放缩的实现。(2)实现初始化反卷积的卷积核。也就是FCN中的使用。
应用一:使用双线性插值法resize一张图片。
import cv2
import numpy as np
def Bilinear_interpolation(src, new_size):
"""使用双线性插值方法放大图像
para:
src(np.ndarray):输入图像,没扩大之前的图片
new_size:(tuple): 目标尺寸
ret:
dst(np.ndarray): 目标图像
"""
dst_h, dst_w = new_size # 目标图像的高和宽
src_h, src_w = src.shape[:2] # 源图像的高和宽
if src_h == dst_h and src_w == dst_w: #如果不变,就认为不放缩,返回即可
return src.copy()
scale_x = float(src_w) / dst_w