第十章Tensorflow图像处理

本文详细介绍了Tensorflow中处理图像的各种方法,包括加载图像、理解会话的作用、图像解码知识,以及批量读取图像的队列操作。还探讨了线程与进程的关系,以及TFRecord格式用于存储大量图像数据的优势。同时,介绍了如何将图像转换为TFRecord文件和读取这些文件。最后,通过实例展示了如何使用tf.image API进行图像调整、裁剪、填充、翻转和色彩调整等操作。
摘要由CSDN通过智能技术生成

10.1加载图像

Tensorflow对图像文件的加载和对二进制文件的加载相同,只是图像的内容需要解码,加载方式比较多。

有两种方式,第一种,把图片看看成一个完整的图片直接读取,获取图片的原始数据,再进行解码。
如使用tf.gfile.FastGFile()读取图像文件,然后利用tf.image.decode_jpeg()或tf.image.decode_pgn()进行解码

#加载包
import matplotlib.pyplot as plt #用于可视化
import tensorflow as tf 

%matplotlib inline 
#当用jupyter notebook编码时候才用,用于显示可视化的图像

image_raw_data_jpq=tf.gfile.FastGFile('C:/Users\qzm\Pictures\Camera Roll\0410.jpg','rb').read()
#函数功能:实现对图片的读取。
#函数参数:(1)path:图片所在路径 (2)decodestyle:图片的解码方式。(‘r’:UTF-8编码; ‘rb’:非UTF-8编码)

Tensorflow中会话的目的

Tensorflow的设计就是把计算定义和运算的结果分开
Session,就是用来让我们的Tensorflow去执行我们一开始声明的计算

图像解码知识

一张RGB图像可以看成一个三维的矩阵,矩阵中的每一个数表示了图像上不同位置,不同颜色的亮度。然而图像在存储时并不是直接记录这些矩阵中的数字,而是记录经过压缩编码之后的结果。所以要将一张图象还原成一个三维矩阵。需要解码的过程。

with tf.Session() as sess:
   img_data=tf.image.decode_jpeg(image_raw_data_jpg)
   #图像解码函数
   plt.figure(1)#图像显示
   print(sess.run(img_data))#显示图像矩阵,三维,R,G,B数字矩阵
   plt.show(img_data.eval())#显示图像,显示你所输入的图像

这一种方式不太适合批量读取数据,第二种方法比较适合批量读取数据,这种方法把图像看成一个文件,用队列的方式读取。在Tensorflow中,队列不仅是一种数据结构,更提供了多线程机制。首先,使用tf.train.string_input_producer找到所需文件,并将其加载到一个队列中,然后,使用tf.WholeFileReader()把完整的文件加载到内存中,用read从队列中读取图像文件,最后,用tf.image.decode_jpeg()或tf.image.decode_pgn()进行解码

import tensorflow as tf
path='C:/Users\qzm\Pictures\image'
#图片路径
file_queue=tf.train.string_input_producer([path])#创建输入队列
image_reader=tf.WholeFileReader()  #创建阅读器
_,image=image_reader.read(file_queue)#用阅读器去读队列
image=tf.image.decode_jpeg(image)#开始解码

with tf.Session() as sess:
    coord=tf.train.Coordinator()#协同启动线程
    """
    tf.train.Coordinator是tensorflow的一个多线程管理器,Coordinator类用来管理在Session中的多个线程,可以用来同时停止多个工作线程并且向那个在等待所有工作线程终止的程序报告异常,该线程捕获到这个异常之后就会终止所有线程。
    
    """
    threads=tf.train.start_queue_runners(sess=sess,coord=coord)#启动线性运行队列,只有调用此函数,才是真正的执行,前面都是声明和等待
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值