上篇我们介绍了Tensorflow基础,https://blog.csdn.net/hao5119266/article/details/103807606
本篇距离上篇跨度较大,需要更深入的学习。期间自己学习了不少时间,包括但不限于:Numpy和Theano两个Python常用库,机器学习常用模型
值得注意的是,自Tensorflow2.0发布以来,许多教材旧代码需要更新或者被弃用,关于Tensorflow2.0的教程少之又少,所以自己重写了不少代码。我认为,对于初学者而言,直接学习TensorFlow2.0是学习Tensorflow最好的方式。
注意:如果使用1.x版本Tensorflow,下列代码可能报错。
目录
1.加载图像
2.调整图像大小
3.裁剪和填充图像
4.旋转
5.色彩调整
6.调整色调饱和度
Tensorflow对图像文件的加载和对二进制文件的加载相同,只是需要解码图像。
例
import matplotlib.pyplot as plt
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
img=tf.io.gfile.GFile('C:/Users\Tensorflow\img\cat.jpg','rb').read()
with tf.compat.v1.Session() as sess:
#解码图像
img_data =tf.image.decode_jpeg(img)
#图像矩阵
print(sess.run(img_data))
#显示图像
plt.imshow(img_data.eval())
如果报错 ImportError: No module named matplotlib.pyplot
说明Tensorflow环境中未安装matplottlib,用pip安装即可
pip install matplotlib
因为我运行的是CPU版本,所以不加下两行代码会报错:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
大概意思是你的CPU支持AVX扩展,但是你安装的TensorFlow版本无法编译使用。
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
除了这个方法也可以访问下列网站重编译tensorflow,以支持AVX2。
https://github.com/lakshayg/tensorflow-build
运行结果
原图像:
除上诉方法外还可以用批处理方法处理多个图像。
将600*600大小图像调整为300*300
import matplotlib
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
img=tf.io.gfile.GFile('C:/Users\Tensorflow\img\cat.jpg','rb').read()
with tf.compat.v1.Session() as sess:
#解码图像
img_data =tf.image.decode_jpeg(img)
#缩放
resized=tf.image.resize(img_data,[300,300])
cat=np.asarray(resized.eval(),dtype='uint8')
#显示图像
plt.imshow(cat)
运行结果:
将600*600图像从中心剪裁区域大小为300*300的图像,并填充至3000*3000的图像中
import matplotlib
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
img=tf.io.gfile.GFile('C:/Users\Tensorflow\img\cat.jpg','rb').read()
with tf.compat.v1.Session() as sess:
#解码图像
img_data =tf.image.decode_jpeg(img)
croped=tf.image.resize_with_crop_or_pad(img_data,300,300)
padded=tf.image.resize_with_crop_or_pad(img_data,3000,3000)
#显示图像
#裁剪
plt.imshow(croped.eval())
plt.show()
#填充
plt.imshow(padded.eval())
plt.show()
运行结果:
裁剪后的图像
填充后的图像
import matplotlib
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
img=tf.io.gfile.GFile('C:/Users\Tensorflow\img\cat.jpg','rb').read()
with tf.compat.v1.Session() as sess:
#解码图像
img_data =tf.image.decode_jpeg(img)
#旋转
transposed=tf.image.transpose(img_data)
#显示图像
plt.imshow(transposed.eval())
plt.show()
运行结果:
import matplotlib
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
img=tf.io.gfile.GFile('C:/Users\Tensorflow\img\cat.jpg','rb').read()
with tf.compat.v1.Session() as sess:
#解码图像
img_data =tf.image.decode_jpeg(img)
#图像色彩调整
adjusted=tf.image.random_brightness(img_data,max_delta=0.5)
#显示图像
plt.imshow(adjusted.eval())
plt.show()
注:色彩明暗在【-max_delta,max_delta】的范围随机调整图像的亮度,所以每次运行的结果并不会一样
import matplotlib
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
img=tf.io.gfile.GFile('C:/Users\Tensorflow\img\cat.jpg','rb').read()
with tf.compat.v1.Session() as sess:
#解码图像
img_data =tf.image.decode_jpeg(img)
#图像色彩调整
adjusted=tf.image.random_hue(img_data,0.1)
#显示图像
plt.imshow(adjusted.eval())
plt.show()
注:这个结果也是随机的,不想随机改成下面的就可以
#图像色彩调整
adjusted=tf.image.adjust_hue(img_data,0.1)
结果:
相关代码会整理进自己的github中
github地址