18. 深度学习——图像的读取(笔记)

1. 图像基本知识

像素值就是特征值
在这里插入图片描述

单通道:每一个像素一个值,叫灰度值在[0~255]之间,三通道,每个像素点3个值。

在这里插入图片描述

4-D张量是 [样本数,height, width, channels]
在这里插入图片描述
缩放图片⼤小:减少像素的量;统⼀图⽚的⼤小,去进⾏算法识别。

2. 图像基本操作API

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

3.案例

狗图片读取

1、构造图片文件队列
2、构造图片阅读器
3、读取图片数据
4、处理图片数据

代码:

import tensorflow as tf
import os

main_path = "F:/文本文件数据/狗图片/"
# 导入数据的准备
file_name = os.listdir(main_path)
# print(file_name) # 以列表的形式列出文件的名字

# 完整路径
file_list = [main_path+x for x in file_name] 
# print(file_list)

# 1.构建文件的队列
file_queue = tf.train.string_input_producer(file_list)

# 2.构造阅读器读取队列数据(默认读取一张图片)
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
print(value)

# 3.对每一个图片进行解码
image = tf.image.decode_jpeg(value)
print(image)

# 4.统一图片大小
image_resize = tf.image.resize_images(image,[200,200])
print(image_resize)

# 5.批处理
image_batch = tf.train.batch([image_resize], batch_size=20, num_threads=1, capacity=20)
print(image_batch)

结果:
在这里插入图片描述

ValueError: All shapes must be fully defined: [TensorShape([Dimension(200), Dimension(200), Dimension(None)])]

做完批处理后,打印批处理后的结果,报错,意思是没有确定形状没有固定,可以看到3-D的张量长宽固定了是200x200但是通道数没有固定。但是又有一个问题,为啥之前形状都是问号没有固定并没有报错。原因是因为RGB有三个值,比如一张图片是很多像素点组成,有很多R值,G值,B值,当一张图片放入队列中相当于放了3张数字表进去(R,G,B),现在批处理,一下子放了好多图片进去,每张图片,有3张表,但是计算机并不知道你传的是彩色图还是灰度图,也就不知道一张图片有几张表,所以产生报错。

在批处理之前固定形状,也就是将图片的通道数写出来。

更正的代码:


import tensorflow as tf
import os

main_path = "F:/文本文件数据/狗图片/"
# 导入数据的准备
file_name = os.listdir(main_path)
# print(file_name) # 以列表的形式列出文件的名字

# 完整路径
file_list = [main_path+x for x in file_name] 
# print(file_list)

# 1.构建文件的队列
file_queue = tf.train.string_input_producer(file_list)

# 2.构造阅读器读取队列数据(默认读取一张图片)
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
print(value)

# 3.对每一个图片进行解码
image = tf.image.decode_jpeg(value)
print(image)

# 4.统一图片大小
image_resize = tf.image.resize_images(image,[200,200])
print(image_resize)

# 注意: 一定要把样本的形状固定【200,200,3】,在批处理的时候要求所有的数据形状必须定义
image_resize.set_shape([200,200,3])
# 5.批处理
image_batch = tf.train.batch([image_resize], batch_size=20, num_threads=1, capacity=20)
print(image_batch)

# 开启会话
with tf.Session() as sess:
    # 定义一个线程协调器
    coord = tf.train.Coordinator()
    
    #开启读文件的线程(这里比之前开启线程方便很多,有专门的的API)
    threads = tf.train.start_queue_runners(sess, coord=coord)
    
    print(sess.run([image_batch]))
    
    # 回收线程
    
    coord.request_stop()
    
    coord.join(threads)

结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值