Opencv

一、插值算法原理介绍

  1. 最近邻插值算法
    这是图像插值里面最简单的一种插值算法,在目标图像中待求的像素点由距离其最近的邻像素灰度确定。
    f(i+m,j+n)表示待求像素点灰度,其中i,j为正整数,m,n为(0,1)之间的数。如果f(i+m,j+n)离左上角更近,那么其灰度值就为(i,j)
    在这里插入图片描述
    这种方法计算量小,但是效果不佳,很容易导致图像灰度的不连续。
  2. 双线性插值算法
    双线性插值,类比于线性插值y=ax+b,双线性就可以理解为两个变量的插值函数的线性插值,本质上是做两个方向的线性插值。如下图。
    在这里插入图片描述
    为了能够求出P点的灰度值,需要先求出R1和R2的值,在通过R1和R2求得P点,已知函数 f = P 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。首先,在x方向做一次线性插值,得到两个表达式:
    在这里插入图片描述
    在 y 方向进行线性插值,得到
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    都为权值,衡量P点离谁更近,则表示其权重越大。

二、OpenCV使用插值算法

  1. opencv调用API实现图片放缩
import cv2


def opencvInterpolation():
    img = cv2.imread('./koala.jpg')
    # 图片缩小一半
    width = int(img.shape[1]*50/100)
    height = int(img.shape[0]*50/100)
    whsize = (width , height)
    minSize = cv2.resize(img, whsize,cv2.INTER_AREA)
    cv2.imshow("img:", img)
    cv2.imshow("minsize:",minSize)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    fx = 1.5
    fy = 1.5
    resized1 = cv2.resize(minSize, dsize=None, fx=fx, fy=fy, interpolation=cv2.INTER_NEAREST)

    resized2 = cv2.resize(minSize, dsize=None, fx=fx, fy=fy, interpolation=cv2.INTER_LINEAR)
    print('Resized Dimensions : ', minSize.shape)

    cv2.imshow("Resized image", minSize)
    cv2.imshow("INTER_NEAREST image", resized1)
    cv2.imshow("INTER_LINEAR image", resized2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
if __name__ == '__main__':
    opencvInterpolation()

参考:https://www.cnblogs.com/yibeimingyue/p/11485732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值