圖像處理之高質量縮放(抗鋸齒)

1.介紹

    在做圖像處理過程中,我們有時會將圖像縮小之後再進行處理,常用的開源圖像算法包“Opencv”已經帶有resize函數,用起來也是很容易上手的。

    對於Opencv中函數原型:cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

    參數:

    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)

    結果可以看下圖,圖中出現很多鋸齒

 

3.改進

    出現上面那種情況之後,我們就不能用Opencv裏面這個函數,那麼就自己寫一個?幸好有人幫我們做了,那就是PIL,裏面也有一個resize,其使用用法和Opencv差不多,我就不展開講了,它的插值方法有如下可選:

    代碼跑一跑:

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差不多):

    Image.ANTIALIAS結果(正是我們所需要結果):

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章