OpenCV-Python|擴充套件縮放與幾種插值方法比較

知識點

影象插值(Image Interpolation)

最常見四種插值演算法

INTER_NEAREST=0

INTER_LINEAR=1

INTER_CUBIC=2

INTER_LANCZ0S4=4

相關的應用場景

幾何變換、透視變換、插值計算新畫素

resize,如果size有值,使用size做放縮插值,否則根據fx與fy卷積

擴充套件與縮放

擴充套件縮放只是改變影象的尺寸大小。

OpenCV 提供的函式cv2。resize()可以實現這個功能。影象的尺寸可以自己手動設定,你也可以指定縮放因子。我們可以選擇使用不同的插值方法。

在縮放時我們推薦使用cv2.INTER_AREA,在擴充套件時我們推薦使用v2.INTER_CUBIC(慢) 和v2.INTER_LINEAR

預設情況下所有改變影象尺寸大小的操作使用的插值方法都是cv2.INTER_LINEAR

。你可以使用下面任意一種方法改變影象的尺寸:

import cv2 as cvsrc = cv。imread(“。。/code_014/HappyFish。jpg”)cv。namedWindow(“input”, cv。WINDOW_AUTOSIZE)cv。imshow(“input”, src)h, w = src。shape[:2] #讀取影象的高寬print(h, w) #列印顯示# 影象的插值縮放 fx,fy是指縮放因子# 插值演算法:# interpolation : INTER_NEAREST(最近鄰插值)dst = cv。resize(src, (w*2, h*2), fx=0。75, fy=0。75, interpolation=cv。INTER_NEAREST)cv。imshow(“INTER_NEAREST”, dst)#interpolation: INTER_LINEAR (雙線性插值)dst = cv。resize(src, (w*2, h*2), interpolation=cv。INTER_LINEAR)cv。imshow(“INTER_LINEAR”, dst)#interpolation : INTER_CUBIC (三次樣條插值:4*4畫素鄰域內的雙立方插值)dst = cv。resize(src, (w*2, h*2), interpolation=cv。INTER_CUBIC)cv。imshow(“INTER_CUBIC”, dst)#interpolation: INTER_LANCZOS4 (8*8畫素鄰域內的Lanczos)dst = cv。resize(src, (w*2, h*2), interpolation=cv。INTER_LANCZOS4)cv。imshow(“INTER_LANCZOS4”, dst)#INTERPOLATION : INTER_AREA (區域插值)dst = cv。resize(src, (w*2, h*2), interpolation=cv。INTER_AREA)cv。imshow(“INTER_AREA”, dst)cv。waitKey(0)cv。destroyAllWindows()

OpenCV-Python|擴充套件縮放與幾種插值方法比較

圖1:原影象

OpenCV-Python|擴充套件縮放與幾種插值方法比較

圖2:最近鄰插值

OpenCV-Python|擴充套件縮放與幾種插值方法比較

圖3: 雙線性插值

OpenCV-Python|擴充套件縮放與幾種插值方法比較

圖4: 三次樣條插值 (4*4)

OpenCV-Python|擴充套件縮放與幾種插值方法比較

圖5 :8*8畫素鄰域內的Lanczos

OpenCV-Python|擴充套件縮放與幾種插值方法比較

圖6 :區域插值

關於這幾種插值演算法的詳細程式碼實現與解釋

https://blog。csdn。net/jia20003/article/details/40020775

https://blog。csdn。net/jia20003/article/details/6919845

https://blog。csdn。net/jia20003/article/details/6915185

https://blog。csdn。net/jia20003/article/details/17856859

https://blog。csdn。net/guyuealian/article/details/85097633