我有一个可变大小图像列表,希望将它们标准化为 256x256 大小。我使用了以下代码
import tensorflow as tf
import matplotlib.pyplot as plt
file_contents = tf.read_file('image.jpg')
im = tf.image.decode_jpeg(file_contents)
im = tf.image.resize_images(im, 256, 256)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
img = sess.run(im)
plt.imshow(img)
plt.show()
但是,tf.resize_images()
往往会弄乱图像。但是,使用 tf.reshape()
似乎可以让 resize_image()
正常运行
tensorflow 版本:0.8.0
我知道 skimage 包可以处理我需要的东西,但是我希望享受 tf.train.shuffle_batch()
的功能。我尽量避免维护 2 个相同的数据集(具有 1 个固定图像大小),因为 Caffe 处理它们似乎没有问题。
最佳答案
发生这种情况是因为 image_resize() 正在相邻像素之间执行插值,并返回 float 而不是 0-255 范围内的整数。这就是 NEAREST_NEIGHBOR 起作用的原因:它在不进行进一步数学运算的情况下获取近像素之一的值。 假设您有一些值为 240、241 的相邻像素。NEAREST_NEIGHBOR 将返回 240 或 241。使用任何其他方法,该值可能类似于 240.5,并且在不四舍五入的情况下返回,我假设是故意的,以便您可以决定什么更好为你(地板,四舍五入等)。 另一方面,当面对浮点值时,plt.imshow() 仅解释小数部分,就好像它们是 0.0 到 1.0 之间的满刻度像素值。 要使上述代码正常工作,可能的解决方案之一是:
import numpy as np
plt.imshow(img.astype(np.uint8))
关于python - tensorflow image_resize 弄乱未知图像大小的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032251/