深度学习实践:计算机视觉
上QQ阅读APP看书,第一时间看更新

2.6 缩放

缩放操作主要为变换图片大小可使用cv2.resize()函数,该函数可使用的参数有三个:第一个参数为图像对象,第二个参数为缩放尺寸,第三个参数为插值选项,常用的插值选项有:

     cv2.INTER_NEAREST
     cv2.INTER_LINEAR
     cv2.INTER_CUBIC
     cv2.INTER_AREA
     cv2.INTER_LANCZOS4
     cv2.INTER_LINEAR_EXACT
     cv2.INTER_MAX
     cv2.WARP_FILL_OUTLIERS
     cv2.WARP_INVERSE_MAP

插值选项的意义可查阅相关资料,以下是缩放操作的简单示例:

     new_w, new_h = 100, 200
     resized_image = cv2.resize(image, (new_w, new_h), interpolation = cv2.INTER_AREA)

该示例表示:使用cv2.INTER_AREA插值方式,将原图image缩放为100px×200px的新图resized_image。

可能有读者对缩放概念的具体操作不是特别清楚,笔者简要说明一下。缩放分为缩小和放大,针对一张图片,缩小就是删除其中某些像素,直接达到需要缩小的目标尺寸,所以存在信息丢失的现象;而放大则是在图像中添加一些像素,使图像变大到目标尺寸。插值就是寻找最优删除或添加像素值的方法。

如图2-4所示为一张3px×3px的图像放大为6px×6px的图像,中间白色区域就需要确定像素值,使用不同的方法,会得到不同的值。

图2-4 图像放大示意图

2.6.1 邻近插值

邻近插值主要使用前一个点的像素值作为新生成区域的像素值,可用以下示例进行形象理解:首先对列放大,插入前一个列对应点的值;然后对行放大,插入前一行对应点的值。

2.6.2 双线性插值

双线性插值则使用邻近两点的平均值为新生成区域的像素值,同样示例如下:首先对列放大,插入相邻列对应点的平均值;然后对行放大,插入相邻行对应点的平均值。

对于OpenCV而言,官方建议缩小使用cv2.INTER_AREA,放大使用cv2.INTER_ LINEAR。cv2.INTER_CUBIC相对较慢,如果不特别指出,cv2.resize会默认使用cv2. INTER_LINEAR插值方式。