最近鄰插值
通過一種計算方法,比對原來圖像的位置資訊,以最近位置的資料進行填充。
缺點:有時候圖像會失真,用該方法作放大處理時,在圖象中可能出現明顯的塊狀效應。
雙線性插值
公式
y = y 0 + ( x − x 0 ) y 1 − y 0 x 1 − x 0 = y 0 + ( x − x 0 ) y 1 − ( x − x 0 ) y 0 x 1 − x 0 y=y_{0}+\left(x-x_{0}\right) \frac{y_{1}-y_{0}}{x_{1}-x_{0}}=y_{0}+\frac{\left(x-x_{0}\right) y_{1}-\left(x-x_{0}\right) y_{0}}{x_{1}-x_{0}} y=y0+(x−x0)x1−x0y1−y0=y0+x1−x0(x−x0)y1−(x−x0)y0
通過計算相應位置上的均值進行填充
映射
可以将幾何運算想象成一次一個象素地轉移到輸出圖象中。如果一個輸入象素被映射到四個輸出象素之間的位置,則其灰階值就按插值算法在4個輸出象素之間進行配置設定。
優點:旋轉、拉伸、放縮可以使用,解決了漏點的問題。
缺點:出現了馬賽克。
練習代碼
import cv2
if __name__ == "__main__":
img=cv2.imread('D://2233.jpg',cv2.IMREAD_UNCHANGED)
print('Original Dimensions:',img.shape)
Scale_persent=30
width=int(img.shape[1]*Scale_persent/100)
height=int(img.shape[0]*Scale_persent/100)
dim=(width,height)
resized=cv2.resize(img,dim,interpolation=cv2.INTER_LINEAR)
fx=1.5
fy=1.5
resized1=cv2.resize(resized,dsize=None,fx=fx,fy=fy,interpolation=cv2.INTER_NEAREST)
resized2=cv2.resize(resized,dsize=None,fx=fx,fy=fy,interpolation=cv2.INTER_LINEAR)
print(resized.shape)
cv2.imshow("Resized image", resized)
cv2.imshow("INTER_NEAREST image", resized1)
cv2.imshow("INTER_LINEAR image", resized2)
cv2.waitKey(0)
cv2.destroyAllWindows()
出現的問題及解決方式
問題:
line 4, in <module>
print('Original Dimensions:',img.shape)
AttributeError: 'NoneType' object has no attribute 'shape'
解決方式:最開始時使用了中文目錄,進而使圖檔無法導入,進而出現問題。