【图像缩放】最邻近插值

原文:https://blog.youkuaiyun.com/mcgrady_tracy/article/details/46625367 

对于图像缩放算法来说,最近临插值算法是最简单的。最近临插值算法的原理是在原图像中找到最近临的一个点,然后把这个点的像素值插入到目标图像中,最近临插值算法优点是算法简单,易于实现,但是缺点是由于相邻像素点的像素值相同,容易出现色块现象。

那么如何在原图像中找这个目标点呢,算法公式如下:

src_x = dst_x * (src_width / dst_width);
src_y = dst_y * (src_height / dst_height);
那么算出来呢,可能会是小数点,需要四舍五入取整,那么下面来看一个例子(一个3*3的矩阵):

234     38      22
67      44      12
89      65      63
这里呢,我们需要将上面的一个3*3矩阵变换成一个4*4的矩阵,我们根据上面的公式来计算一下,首先是目标点为(0,0),那么原图像的坐标点为(0,0),那么这个坐标点的值就应该为234,然后再来看(0,1)这个坐标点,那么纵坐标点还是0,但是横坐标点变成了1*(3/4) = 0.75,四舍五入得1,那么得到的原图像坐标为(0,1),那么这个坐标点值就应该为38,同理,最后得到的矩阵结果如下:

234    38    22    22    
67    44    12    12    
89    65    63    63    
89    65    63    63

 

opencv已经实现了这个算法,我们可以直接使用:

import cv2 as cv

src = cv.imread('/Users/dotz/Documents/id3_b.png')
cv.namedWindow('input_image', cv.WINDOW_NORMAL) #设置为WINDOW_NORMAL可以任意缩放

dst = cv.resize(src,(2048,2048),interpolation=cv.INTER_NEAREST)

cv.imshow('input_image', dst)
cv.imwrite('/Users/dotz/Documents/id3_bak.png', dst)
cv.waitKey(0)
cv.destroyAllWindows()

其中interpolation=cv.INTER_NEAREST表示使用最邻近插值法,还有其他插值算法:

INTER_AREA = 3
INTER_BITS = 5
INTER_BITS2 = 10
INTER_CUBIC = 2
INTER_LANCZOS4 = 4
INTER_LINEAR = 1

INTER_LINEAR_EXACT = 5

INTER_MAX = 7
INTER_NEAREST = 0

INTER_TAB_SIZE = 32
INTER_TAB_SIZE2 = 1024

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值