图像大小的调整方式:在Tensorflow中通过tf.image.resize_images函数实现;
1.双线性插值算法(Bilinear interpolation);Method取值为:0;
2.最近邻居法(Nearest neighbor interpolation);Method取值为:1;
3.双三次插值法(Bicubic interpolation);Method取值为:2;
4.面积插值法(Area interpolation) ;Method取值为:3;
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
image_raw_data = tf.gfile.GFile('D:/path/to/picture/8.jpg','rb').read() #加载原始图像
with tf.Session() as sess:
img_data = tf.image.decode_jpeg(image_raw_data)
plt.imshow(img_data.eval())
plt.show()
resized = tf.image.resize_images(img_data, [300,300],method=0) #第一个参数为原始图像,第二个参数为图像大小,第三个参数给出了指定的算法
resized = np.asarray(resized.eval(),dtype='uint8')
plt.imshow(resized)
plt.show()
croped = tf.image.resize_image_with_crop_or_pad(img_data,200,200) #目标图像大小<原始图像的大小,则截取原始图像的居中部分,
padded = tf.image.resize_image_with_crop_or_pad(img_data,800,800) #目标图像大小>原始图像的大小,则会在原始图像的四周填充全为0背景
plt.imshow(croped.eval())
plt.show()
plt.imshow(padded.eval())
plt.show()
central_cropped = tf.image.central_crop(img_data,0.5) #按照比例裁剪图像,第二个参数为调整比例,比例取值[0,1]
plt.imshow(central_cropped.eval())
plt.show()
在上述代码中,通过tf.image.resize_images函数调整图像的大小。
并且Tensorflow提供API对图像进行裁剪或者填充,当目标图像大小小于原始图像的大小时,则需要裁剪原始图像
当目标图像大小在大于原始图像的情况下,则需要填充原始图像四周
最后还可以通过函数tf.image.central_crop()来按照比例调整图像大小;
上述代码实验结果图为:
原始图像: tf.image.resize_images(img_data, [300,300],method=0) tf.image.resize_image_with_crop_or_pad(img_data,200,200)
tf.image.resize_image_with_crop_or_pad(img_data,800,800) tf.image.central_crop(img_data,0.5)