龙空技术网

OpenCV-Python|扩展缩放与几种插值方法比较

合鸣山下带发修行学AI 116

前言:

此刻我们对“双线性插值图像放大缩小算法”大体比较注重,小伙伴们都需要分析一些“双线性插值图像放大缩小算法”的相关内容。那么小编在网摘上汇集了一些对于“双线性插值图像放大缩小算法””的相关知识,希望你们能喜欢,你们一起来学习一下吧!

知识点

图像插值(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 :区域插值

关于这几种插值算法的详细代码实现与解释

标签: #双线性插值图像放大缩小算法 #c语言三次样条插值 #cubic插值 #差值扩展算法的书