Tensorflow

本文介绍了如何使用TensorFlow的API从文件列表中随机、批量读取图像,并对图像进行统一大小调整。通过示例展示了如何创建文件队列、使用WholeFileReader读取、解码JPEG图片,然后进行缩放和形状设定,最后实现数据批处理。
摘要由CSDN通过智能技术生成

图像样本读取

# 利用tf提供API随机、批量读取图像样本
import tensorflow as tf
import os


def img_read(filelist):  # 读取图像样本
    # 1.构建文件列队
    file_queue = tf.train.string_input_producer(filelist)
    # 定义reader,读取图像、解码
    reader = tf.WholeFileReader()  # 一次性读取整个文件内容
    # 读取,返回文件名称、数据
    k, v = reader.read(file_queue)
    # 解码
    img = tf.image.decode_jpeg(v)
    # 3.批处理,批处理之前需要将图像设置成统一大小
    # 缩放图像
    img_resized = tf.image.resize(img,  # 原图
                                  [200, 200])  # 缩放到200*200
    # 设置张量形状
    img_resized.set_shape([200, 200, 3])  # 200*200,3通道
    img_bat = tf.train.batch([img_resized],  # 数据
                             batch_size=10,  # 一个批次10笔
                             num_threads=1)  # 线程数量
    return img_bat


if __name__ == "__main__":
    # 1. 找到文件,构造一个列表
    dir_name = "test_img/"
    file_names = os.listdir(dir_name)
    file_list = []
    for f in file_names:
        file_list.append(dir_name + f)  # 拼接目录和文件名

    imgs = img_read(file_list)  # 调用函数

    # 开启session运行结果
    with tf.Session() as sess:
        coord = tf.train.Coordinator()  # 定义线程协调器
        # 开启读取文件线程
        # 调用 tf.train.start_queue_runners 之后,才会真正把tensor推入内存序列中
        # 供计算单元调用,否则会由于内存序列为空,数据流图会处于一直等待状态
        # 返回一组线程
        threads = tf.train.start_queue_runners(sess, coord=coord)
        # print(sess.run([imgs]))  # 打印读取的内容
        imgs = imgs.eval()  # 执行imgs操作,将返回值存入imgs

        # 回收线程
        coord.request_stop()
        coord.join(threads)

# 显示图片
print(imgs.shape)
import matplotlib.pyplot as plt

plt.figure("Img Show", facecolor="lightgray")

for i in range(10):
    plt.subplot(2, 5, i + 1)  # 2行5列第i+1个子图
    plt.xticks([])
    plt.yticks([])
    plt.imshow(imgs[i].astype("int32"))  # 将像素值转换为整型显示

plt.tight_layout()
plt.show()

执行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值