知識點
影象插值(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()
圖1:原影象
圖2:最近鄰插值
圖3: 雙線性插值
圖4: 三次樣條插值 (4*4)
圖5 :8*8畫素鄰域內的Lanczos
圖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