效果
- 原图(1920*1080)
- 扩大后图片(2560*1440)
理论部分
- 最邻近插值The nearest interpolation
设i+u, j+v (i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素
灰度的值 f(i+u, j+v) 如下图所示:
代码部分
import cv2
import numpy as np
def n_interp(img):
height,width, channels = img.shape[:3]
#这里要注意,图片高对应二维数组行数,宽对应二维数组列数,所以先高后宽
emptyImg = np.zeros((1440,2560,channels),np.uint8)
expMultH = 1440/height
expMultW = 2560/width
print(width,height,expMultW,expMultH)
#[y,x]是新图片[j,i]位置像素采用最邻近插值后对应的原图中的像素位置
#对二维数组按行遍历,即对图像按高遍历
for j in range(1440):
for i in range(2560):
y = int(j / expMultH + 0.5)
x = int(i / expMultW + 0.5)
emptyImg[j,i] =img[y,x]
return emptyImg
# cv2.resize(img, (2560,1440,c),near/bin)
img = cv2.imread("shangri-la.jpg")
print(img.shape)
expImg = n_interp(img)
print(expImg)
cv2.imshow("nearest interp",expImg)
cv2.imshow("source image",img)
cv2.waitKey(0)
# 保存处理后的图片到当前目录
cv2.imwrite("shangri-la_resized.jpg", expImg)