一、resize 函数中 interpolation 参数的区别和用途
cv2.resize 函数中的 interpolation 参数用于指定图像缩放时使用的插值方法。不同的插值方法会影响缩放后图像的质量和处理速度。以下是cv2.INTER_AREA
、cv2.INTER_CUBIC
、cv2.INTER_NEAREST
、cv2.INTER_LINEAR
和 cv2.INTER_LANCZOS4
的对比:
根据上述对比:
-
如果目标是快速缩小图像且可以接受一定的质量损失,应选择
cv2.INTER_NEAREST
。 -
如果需要在缩小图像时保持较高的质量,应选择
cv2.INTER_AREA
。 -
对于需要在放大和缩小图像时都保持较好质量的应用,
cv2.INTER_CUBIC
和cv2.INTER_LINEAR
是较好的选择,具体取决于是否可以接受较慢的处理速度。 -
当图像质量是最重要的,尤其是在放大图像时,应选择
cv2.INTER_LANCZOS4
,尽管这会牺牲处理速度。
一般在做训练数据预处理时,缩小图像使用 cv2.INTER_AREA
,放大图像使用 cv2.INTER_CUBIC
def image_resize(img, size):
if img.shape[0] > size:
# 基于像素区域关系的重采样,适用于图像缩小,尤其是图像抽取,可以避免摩尔纹现象
img = cv2.resize(img, (size, size), interpolation=cv2.INTER_AREA)
elif img.shape[0] < size:
# 基于4x4像素邻域的三次插值,适用于图像放大和缩小,能够提供较高的图像质量,但计算量相对较大
img = cv2.resize(img, (size, size), interpolation=cv2.INTER_CUBIC)
return img
参考文档:
https://blog.csdn.net/guyuealian/article/details/85097633