我正在使用脚本将图像加载到TensorFlow,这显然适用于所有人,但是当我尝试它时,我最终得到了黑色图像(零矩阵)。我尝试了几个图像文件,并且它总是为零,当我故意拼错图像位置字符串时,它报告错误(应该如此)。返回图像张量的大小是正确的(256,256,3)
。这是脚本,有人看到错误吗?
file_names = ['/home/marko/Data/train_27.jpg']
filename_queue = tf.train.string_input_producer(file_names)
image_reader = tf.WholeFileReader()
title, image_file = image_reader.read(filename_queue)
image = tf.image.decode_jpeg(image_file,channels=3)
with tf.Session() as sess:
tf.global_variables_initializer().run()
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
image_tensor = sess.run(image)
print(image_tensor)
print(image_tensor.shape)
coord.request_stop()
coord.join(threads)
答案 0 :(得分:2)
您的代码是正确的。 我对来自Kaggle competition
的图片也有同样的问题似乎Tensorflow会对这些文件非常地判断色彩空间,或者图像中编码的cloorspace信息不正确。
似乎Tensorflow在解码图像时不允许强制执行色彩空间。所以最简单的方法就是修复"图像。
我已经使用过'转换' ImageMagic工具包中的实用工具:
ls train-jpg/ | \
parallel convert -colorspace sRGB train-jpg/{} fixed-train-jpg/{}
答案 1 :(得分:0)
我有另一种解决方案,不需要Evgeny建议通过命令行进行转换,而是使用枕头加载图像:
import numpy as np
from PIL import Image
def load_image(img_path, resize=[256, 256]):
pil_img = Image.open(img_path).convert("RGB")
img = np.asarray(pil_img) / 255
img_tensor = tf.convert_to_tensor(img)
img_final = tf.image.resize(img_tensor, resize)
return img_final