OpenCV02:图片的缩放&最近邻域插值原理

一般来讲,图片的缩放可以使用openCV中的resize函数进行实现,简单地说,为四个步骤:

1、图片加载    2、获取图片信息    3、调用resize方法    4、展示图片

代码如下:

import cv2
img = cv2.imread('OpenCV/image0.JPG', 1)
imInfo = img.shape
print(imInfo)
height = imInfo[0]
width = imInfo[1]
mode = imInfo[2]    # 描述的是颜色的组成方式
# 1、放大,缩小 2、等比例缩放,非等比例缩放
dstHeight = int(height * 0.5)
dstWidth = int(width * 0.5)

# OpenCV中提供了四种常见的图片缩放方法
# 最近临域差值 双线性插值 像素关系重采样 立方插值,默认情况下,使用第二种方法
dst = cv2.resize(img, (dstWidth, dstHeight))
cv2.imshow('image', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()    # esc可退出,不然会busy

图片

最近邻域插值原理:

假设有一个10*20的图片,我们要缩放到5*10(记为dst),那么dst中的每一个点都来自于原图片,比如dst中(1,2)<-- (2,4)

那么我们如何计算并找到这些点呢?

即已知dst中的点,要求出原图片中的点。这里有个公式:

newX = 目标图片 X * (原图片的行 / 目标图片的行)

例如,想要计算目标图片中 x为 1 的点对应的是原图像中的哪个点的x值
newX = 1 * (10 / 5) = 2
 同样的,newY = 目标图片 Y * (原图片 列 / 目标图片 列)
 newY = 2 * (20 / 10) = 4 
有时,我们计算出来的结果并不为整数,例如 12.3 ,则取最近的像素 12,
这种方法即为最近临域。

代码实现如下:

图片

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值