图像缩放之最近领域插值法
说到图像缩放,那是我们大家无所不会的神操作。因为目前各种移动设备都支持手动缩放。可是对于码农来说,不只是停留在缩放的表象,而是应该深入原理底部,了解缩放的原理。
缩放有两种类型:等比缩放和非等比缩放。
基本概念:
像素:是指在由一个数字序列表示的图像中的一个最小单位。
灰度图像:灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2。在医学、图像识别领域有很广泛的用途。
彩色图像:是指每个像素由R、G、B分量构成的图像,其中R、G、B是由不同的灰度级来描述的。
对于最近领域插值法的原理,我进行如下阐述:
我们定义dst为缩放之后的图像(dheight,dwidth),img为原始图像(height,width),设(x,y)为img图像所在的行和列,(xNew,yNew)为为对(x,y)缩放后像素所在的行和列。
那么x与xNew关系为:x = xNew*(height/dheight),y与yNew关系:y = yNew*(width/dwidth)。
有了上面阐述的原理那我我们用python代码实现方法如下:
#图像缩放值最近领域插值法
import cv2
import numpy as np
#1.加载图片
img = cv2.imread("2.jpg")
cv2.imshow("img",img)
#2.获取图片信息
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
#3.使用最近领域插值法对图像进行缩放
dHeight = int(height/2)
dWidth = int(width/2)
dst = np.zeros((dHeight,dWidth,3),np.uint8)
for i in range(0,dHeight):
for j in range(0,dWidth):
iNew = int(i*(height*1.0/dHeight))
jNew = int(j*(width*1.0/dWidth))
dst[i,j] = img[iNew,jNew]
#4.检查图片
cv2.imshow("dst",dst)
cv2.waitKey(1000)
#代码效果展示: