一般来讲,图片的缩放可以使用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,
这种方法即为最近临域。
代码实现如下: