用最近邻插值与双线性插值原理完成图像缩放
最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应
双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克
代码
def inter(img):
'''
Task01 图像缩放
:param img:
:return:
'''
scale_percent = 30 # percent of original size
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
# 双线性插值缩小
resized = cv2.resize(img, dim, interpolation = cv2.INTER_LINEAR) # 缩小到0.3
fx = 1.2
fy = 1.2
# 方法1:最近邻插值放大
nearest_resized = cv2.resize(img, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_NEAREST)
# 方法2:双线性插值放大
linear_resized = cv2.resize(img, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_LINEAR)
print('Resized Dimensions : ',resized.shape)
cv2.imshow("Resized image", resized)
cv2.imshow("INTER_NEAREST image", nearest_resized)
cv2.imshow("INTER_LINEAR image", linear_resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
img = cv2.imread('./xiabang.jpg', cv2.IMREAD_UNCHANGED)
print('Original Dimensions : ',img.shape)
inter(img)