利用python的opencv框架实现图像插值算法

本文介绍了图像处理中的两种常见插值算法——最近邻插值和双线性插值。最近邻插值简单直接,而双线性插值则通过两次线性插值提供更平滑的缩放效果。文章还提供了基于Python的OpenCV库实现这两种插值方法的代码示例,展示了如何对图像进行缩放操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插值算法

图像常用的插值算法有两种,一种是最近邻插值算法,另外一种是双线性插值算法。最近邻插值算法,顾名思义最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出。

emsp;如上图所示,目标图像中的某点投影到原图像中的位置为点P,此时易知,f(P)=f(Q11)f(P) = f(Q11)f(P)=f(Q11).
 如下图所示,将一幅3X3的图像放大到4X4,用f(x,y)f(x, y)f(x,y)表示目标图像,h(x,y)h(x, y)h(x,y)表示原图像,我们有如下公式:
f(dstX,dstY)=h(dstXsrcWidthdstWidth,dstYsrcHeightdstHeight) \begin{array}{c} f(dst_{X}, dst_{Y}) = h(\frac{dst_{X}src_{Width}} {dst_{Width}}, \frac{dst_{Y}src_{Height}} {dst_{Height}}) \end{array} f(dstX,dstY)=h(dstWidthdstXsrcWidth,dstHeightdstYsrcHeight)

对于双线性插值,双线性插值就是线性插值在二维时的推广,在两个方向上做三次线性插值,具体操作如下图所示:

基于python的实现方法

import cv2
 
if __name__ == "__main__":
    img = cv2.imread('D:/image/yuner.jpg', cv2.IMREAD_UNCHANGED)
    
    print('Original Dimensions : ',img.shape)
    
    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)
    # resize image
    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 Dimensions : ',resized.shape)
    
    cv2.imshow("Resized image", resized)
    cv2.imshow("INTER_NEAREST image", resized1)
    cv2.imshow("INTER_LINEAR image", resized2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

很随便的wei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值