遇到的问题:手里有一个512*512的图像,我想把它变大一点。
最容易想到的方法是插值,如:最邻近插值、线性插值等。。。(之前均实现过)
下面来一种简单粗暴,不太需要算法的算法。
函数功能:将输进去的图片扩充为原来的两倍。
import numpy as np
import math
import matplotlib.pyplot as plt
import matplotlib.image as mp
#扩充图片成其两倍
def larger2(data,width):
newdata = np.zeros((2*width,2*width),dtype=np.uint8)
#将原来的像素点均匀的拉开分散到newdata中
for i in range(width):
for j in range(width):
newdata[2*i][2*j] = data[i][j]
#横向填充,左右像素取平均
for i in range(width):
for j in range(width-1):
a, b = np.int32(data[i][j]), np.int32(data[i][j+1]) #否则是256进制
newdata[2*i][2*j+1] = math.floor((a+b)//2)
#纵向填充,上下像素取平均
for i in range(width-1):
for j in range(2*width-1):
a, b = np.int32(newdata[2*i][j]), np.int32(newdata[2*i+2][j])
newdata[2*i+1][j] = math.floor((a+b)//2)
newdata.tofile("lenna1024.raw")
plt.imshow(newdata, cmap='gray')
plt.show()
data = np.fromfile(r'D:lenna512.raw', dtype=np.uint8) # car:(338,600);lenna:(512,512)
data = np.array(data, dtype=np.uint8)
data = data.reshape(512, 512)
larger2(data,512)
原图:
变大后的图:
tips:主要看图片上面的尺寸哦!