• tensorflow 中图像的读取


    1. 使用gfile读入文件内容。输入的是String,输出3-D tensor。可惜的是输入不能是tensor

    def decode_jpg(path):
        r""" 读取jpg图像
    
        :param path: full path
        :return: A `Tensor` of type `float32`. 3-D with shape `[height, width, channels]`
        """
        image_raw_data = tf.gfile.FastGFile(path, "r").read()
        image = tf.image.decode_jpeg(image_raw_data)
        image = tf.image.convert_image_dtype(image, dtype=tf.float32)
        return image

    2. 使用WholeFileReader。输入的是queue。

    image_reader = tf.WholeFileReader()
    data_queue = tf.train.string_input_producer([image_dir], shuffle=False)
    image_key, image_value = image_reader.read(data_queue)
    img
    = tf.image.decode_jpeg(image_value, channels=3)

    3. 使用read_file。输入的是tensor,不是queue

    image_value = tf.read_file(image_dir)
    img = tf.image.decode_jpeg(image_value, channels=3)

    4. 一个错误:一个csv中每行保存图像的地址和label结果。最初的读入方法是:

        data_queue = tf.train.string_input_producer([data_dir], shuffle=False)
        reader = tf.TextLineReader(skip_header_lines=True)
        key, value = reader.read(data_queue)
        record_defaults = [[2], ['label'], [157], [81], ['Path']]
        _, label, width, height, image_dir = tf.decode_csv(value, record_defaults, field_delim="	")
        image_dir = tf.string_join([image_folder_dir, image_dir])
        
        img_reader = tf.WholeFileReader()
        img_key,img_value = img_reader.reader(tf.train.string_input_producer([image_dir], shuffle=False)

    因为当时没有发现read_file这种方法读取文件。所以先后使用了两次 string_input_producer。本以为第二次只传入一个image_dir,图像数据和label会一致。但是即使把shuffle设置为false, 图像和label也对不上了。

    所以把后来的 WholeFileReader换成了tf.read_file(image_dir) 。这就可以了

  • 相关阅读:
    喷水装置(一)
    下沙小面的(2)
    +-字符串
    非洲小孩
    寻找最大数(三)
    C
    寻找最大数
    阶乘之和
    背包问题
    python的内存管理机制(zz)
  • 原文地址:https://www.cnblogs.com/yuetz/p/6708574.html
Copyright © 2020-2023  润新知