当前位置:   article > 正文

Opencv

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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/959130
推荐阅读
相关标签
  

闽ICP备14008679号