TensorFlow入门13——图片文件读取

图片文件读取

"""读取图片,name="13.py".  * 在线程中读取  步骤: 1.构建图片文件队列:file_queue = tf.train.string_input_producer(filelist) 2.创建图片文件阅读器:reader=tf.WholeFileReader(filelist) 3.读取图片文件内容:key,value=reader.read(file_queue)  图片的基本知识: * 图片三要素:高,宽,通道数,张量表示:[height,width,channels]  (黑白图片==>单通道(灰度值:[0~255])  彩色图片==> 三通道[Red,Green,Blue])  图片前期处理的目的: * 增加图片数据的统一性 * 所有图片转化成指定大小 * 缩小图片数据量防止增加开销  图像处理API: 1.缩小图片:tf.image.resize_images(images, size)  images:* 4D形状[batch, height, width, channels]  * 或3D形状的张量[height, width, channels]的图片数据  size:[new_height, new_width] (图像的新尺寸,1D的int32张量)  2.图像读取器:  reader=tf.WholeFileReader():将文件的全部内容作为值输出的读取器  key,value=reader.read(file_queue)  3.图像解码器(根据不同图片进行选择):  * tf.image.decode_jpeg(contents):将JPEG编码的图像解码为uint8张量  返回:uint8张量,3D形状[height, width, channels]  * tf.image.decode_png(contents):将PNG编码的图像解码为uint8或uint16张量  返回:张量类型,3D形状[height, width, channels]  """
import tensorflow as tf
import os


def IMG_read(filelist):
    """创建一个图片队列"""
    file_queue = tf.train.string_input_producer(filelist)

    """创建图片文件阅读器"""
    reader = tf.WholeFileReader()

    """读取图片文件内容"""
    key, value = reader.read(file_queue)

    """进行图片内容解码"""
    image = tf.image.decode_jpeg(value)

    """调整图片大小"""
    image_resize = tf.image.resize_images(image, [200, 200])

    """确定通道数"""
    image_resize.set_shape([200, 200, 3])

    """进行批处理"""
    image_batch = tf.train.batch(
        [image_resize], batch_size=5, num_threads=2, capacity=32)

    return image_batch


if __name__ == "__main__":

    """获取图片文件的文件名"""
    filename = os.listdir("./model/13_IMG/")
    print(filename)

    """给图片文件添加路径"""
    filelist = [os.path.join("./model/13_IMG/", file)
                for file in filename]  # 为CSV文件添加路径
    print(filelist)

    """将样本编码成tensor,并返回某个样本"""
    image_batch = IMG_read(filelist)

    with tf.Session() as sess:
        """开启线程管理器"""
        coord = tf.train.Coordinator()

        """开始读文本线程"""
        thread = tf.train.start_queue_runners(sess, coord=coord, start=True)

        print(sess.run(image_batch))

        """停止子线程,回收线程资源"""
        coord.request_stop()  # 停止子线程
        coord.join(thread)  # 回收子线程

    原文作者:一个人的游弋
    原文地址: https://zhuanlan.zhihu.com/p/53630398
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞