读取图片的方法(三种):
第一种:直接把图片看做是一个图片直接读取进来,先获取图片的原始数据,然后在解码
import tensorflow as tf
image_raw_data = tf.gfile.FastGFile("./test.jpg").read()
image = tf.image.decode_jpeg(image_raw_data)
image.eval(session=tf.Session())
其中:tf.gfile.FastGFile()就相当于平时使用的open()函数一样,打开文件,read方法就是读取图片中的内容以字符串的形式返回。
tf.image.decode_jpeg(),就是将一张jpeg压缩编码格式的图片解码成uint8 tensor,给予tensorflow当做tensor流进行处理。这种解码的方式还有很多如:tf.image.decode_png,tf.image.decode_image等等。。。
第二种:把图片看成一个文件,用队列的方式读取。
import tensorflow as tf
path = "./test.jpg"
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()
threads = tf.train.start_queue_runners(sess,coord)
print sess.run(image)
coord.request_stop()
coord.join(threads)
其中:tf.train.string_input_producer()就是将文件名称全部加载到一个队列中,之后tf就是从这个队列里面读取目录,要注意一点的是这个函数的shuffle参数默认是True,也就是你传给他文件顺序是1234,但是到时候读就不一定了。
tf.WholeFileReader()创建读取文件的reader,read读取的是输入的队列。读取的仍然是原始数据,需要解码。
tf.train.Coordinator() 创建线程的协调器,帮助管理线程,当用到队列读取数据的时候需要使用。
tf.train.start_queue_runners() 启动队列,若果不启动的话,tf的队列将会无休止的挂起,程序将没有反应。
第三种:tensorflow的read_file,decode输出是Tensor,eval后是ndarray 与方法1的gfile读取差别不大,只是换了一个函数read_file
path = "./test.jpg"
image_value = tf.read_file(path)
image = tf.image.decode_jpeg(image_value)
print image.eval(session=tf.Session())
图像处理:在训练模型的时候,数据是至关重要的,但是数据收集以及标注的代价都是巨大的,所以运用图像处理技术,可以很好的扩充图像,增大数据量,缓解数据不足的问题,提高模型的识别准确率。
改变图像大小:
tf.image.resize_images(image,(256,256),tf.image.ResizeMethod.AREA)
image表示需要改变此存的图像,第二个参数改变之后图像的大小,method用于表示改变图像过程用的差值方法。0:双线性差值。1:最近邻居法。2:双三次插值法。3:面积插值法。
对图片进行裁剪或者填充:
tf.image.resize_image_with_crop_or_pad(image,100,100)
第一个参数为原始图像,后面两个参数是调整后的目标图像的高和宽。如果原始图像的尺寸大于目标图像,那么这个函数会自动截取原始图像中居中的部分。如果目标图像大于原始图像,这个函数自动在原始图像的四周填充全0背景。
图像翻转:
上下翻转:tf.image.flip_up_down(image)
左右翻转:tf.image.flip_left_right(image)
对角线翻转:tf.image.transpose_image(image)
以一定概率上下翻转:tf.image.random_flip_up_down(image)
以一定概率左右翻转:tf.image.random_flip_left_right(image)
图像色彩调整:
调整亮度:tf.image.adjust_brightness(image,-0.5),当第二个参数为负的时候,是减少图像的亮度,正的时候,是增加亮度。
在一定范围内随机调整亮度:tf.image.random_brightness(image,0.5),这第二个参数表示的是一个范围[-0.5,0.5)随机选值调整亮度。
调整图像对比度:tf.image.adjust_contrast(image,5),当第二个参数为负的时候,是减少图像的对比度,正的时候,是增加对比度。
在一定范围内随机调整对比度:tf.image.random_contrast(image,lower,upper),在[lower,upper]的范围内随机调整图像的对比度,其中upper必须大于lower,lower不能为负数。
调整图像的色相(饱和度):
调整色相:tf.image.adjust_hue(image,0.5) 第二参数只能为正数,当为负数的时候,展现的结果是和他的正数的效果是一样的。意思是为图像的色相增加多少。
在一定范围内随机调整色相:tf.image.random_hue(image,0.5) 意思就是在[0,0.5]之间随机的调整色相。
调整饱和度:tf.image.adjust_saturation(image,5) 第二个参数为正的时候,增大图像的饱和度,反之为负,就是减小图像的饱和度。
在一定范围内随机调整饱和度:tf.image.random_saturation(image,lower,upper) 在[lower,upper]的范围内随机调整图像的饱和度,其中upper必须大于lower
图像标准化:使图像的均值变为0,方差为1(是图像的亮度)
tf.image.per_image_standardization(image)
原文:https://www.cnblogs.com/magicpig666/p/8820100.html