tf.image.decode_jpeg()返回零的矩阵

时间:2017-05-05 14:00:20

标签: python image tensorflow

我正在使用脚本将图像加载到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)

2 个答案:

答案 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