首先,说到图片的padding问题,我们知道对于灰度图(channel=1)的图片我们可以之间将其转化为numpy.array,然后利用np.pad(image,((up,down),(left,right)),'constant', constant_values=(255,255))对图像填充边框,而对于RGB模式(channel=3)下的图片,则无法采用该方法进行填充。但有了之前的基础,我们可以采用相同的原理进行填充。即将RGB模式的图片转化为一个三维的数组,然后利用分片技术,分别提取出每一维的数组进行填充。最后再利用numpy.array的深度矩阵拼接函数将三个二维的数组合成一个三维的数组。然后再将其转换为RGB格式的图片。
其代码实现如下所示:
首先先贴上原图:
代码部分:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
image = Image.open("Dr.Strange.jpg")
image = np.array(image)
#打印原来的图片
plt.imshow(image,cmap = plt.gray())
plt.show()
channel_one = image[:,:,0]
channel_two = image[:,:,1]
channel_three = image[:,:,2]
channel_one = np.pad(channel_one, ((10, 10),(10, 10) ), 'constant', constant_values=(0,0))
channel_two = np.pad(channel_two, ((10, 10),(10, 10) ), 'constant', constant_values=(0,0))
channel_three = np.pad(channel_three, ((10, 10),(10, 10) ), 'constant', constant_values=(0,0))
image = np.dstack((channel_one,channel_two,channel_three))
#打印处理完的图片
plt.imshow(image,cmap = plt.gray())
plt.show()
image = Image.fromarray(image)
image.save("Dr.Strange.jpg")
最终的效果图: