图像处理之高质量缩放(抗锯齿)

1.介绍

    在做图像处理过程中,我们有时会将图像缩小之后再进行处理,常用的开源图像算法包“Opencv”已经带有resize函数,用起来也是很容易上手的。

    对于Opencv中函数原型:cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

    参数:

图像处理之高质量缩放(抗锯齿)_第1张图片

    interpolation - 插值方法,共有5种:

         1)INTER_NEAREST - 最近邻插值法

         2)INTER_LINEAR - 双线性插值法(默认)

         3)INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。

        4)INTER_CUBIC - 基于4x4像素邻域的3次插值法

        5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值

 

2.代码

    我们用cv2.resize对于一张4k的图像进行缩放到768x512大小,另外选择最复杂的插值方法cv2.INTER_LANCZOS4,代码如下:

import cv2

img_path = "864_4K_Las_Vegas.png"
img1 = cv2.imread(img_path)
img1 = cv2.resize(img1, (768, 512), cv2.INTER_LANCZOS4)
cv2.imwrite("opencv.png", img1)

    结果可以看下图,图中出现很多锯齿

图像处理之高质量缩放(抗锯齿)_第2张图片

 

3.改进

    出现上面那种情况之后,我们就不能用Opencv里面这个函数,那么就自己写一个?幸好有人帮我们做了,那就是PIL,里面也有一个resize,其使用用法和Opencv差不多,我就不展开讲了,它的插值方法有如下可选:

图像处理之高质量缩放(抗锯齿)_第3张图片

    代码跑一跑:

from PIL import Image

img = Image.open(img_path)
img2 = img.resize((768, 512))
img2.save("PIL_default.png")

img3 = img.resize((768, 512), Image.ANTIALIAS)
img3.save("PIL_Image_ANTIALIAS.png")

    默认结果(和Opencv差不多):

图像处理之高质量缩放(抗锯齿)_第4张图片

    Image.ANTIALIAS结果(正是我们所需要结果):

图像处理之高质量缩放(抗锯齿)_第5张图片

 

你可能感兴趣的:(Opencv笔记)