图像插值算法

最近邻插值

通过一种计算方法,比对原来图像的位置信息,以最近位置的数据进行填充。
缺点:有时候图像会失真,用该方法作放大处理时,在图象中可能出现明显的块状效应。

双线性插值

公式

y = y 0 + ( x − x 0 ) y 1 − y 0 x 1 − x 0 = y 0 + ( x − x 0 ) y 1 − ( x − x 0 ) y 0 x 1 − x 0 y=y_{0}+\left(x-x_{0}\right) \frac{y_{1}-y_{0}}{x_{1}-x_{0}}=y_{0}+\frac{\left(x-x_{0}\right) y_{1}-\left(x-x_{0}\right) y_{0}}{x_{1}-x_{0}} y=y0+(xx0)x1x0y1y0=y0+x1x0(xx0)y1(xx0)y0
通过计算相应位置上的均值进行填充

映射

  可以将几何运算想象成一次一个象素地转移到输出图象中。如果一个输入象素被映射到四个输出象素之间的位置,则其灰度值就按插值算法在4个输出象素之间进行分配。
优点:旋转、拉伸、放缩可以使用,解决了漏点的问题。
缺点:出现了马赛克。

练习代码

import cv2
if __name__ == "__main__":
    img=cv2.imread('D://2233.jpg',cv2.IMREAD_UNCHANGED)
    print('Original Dimensions:',img.shape)
    
    Scale_persent=30
    width=int(img.shape[1]*Scale_persent/100)
    height=int(img.shape[0]*Scale_persent/100)
    dim=(width,height)

    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.shape)
    cv2.imshow("Resized image", resized)
    cv2.imshow("INTER_NEAREST image", resized1)
    cv2.imshow("INTER_LINEAR image", resized2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

出现的问题及解决方式

问题:

 line 4, in <module>
	    print('Original Dimensions:',img.shape)
	AttributeError: 'NoneType' object has no attribute 'shape'

解决方式:最开始时使用了中文目录,从而使图片无法导入,进而出现问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值