从零搭建人脸识别系统(4)Tensorflow 图像处理(适用最新Tensorflow2.0以上版本)

本文详细介绍了如何使用TensorFlow2.0进行图像预处理,包括图像加载、大小调整、裁剪填充、旋转及色彩调整等关键操作。针对初学者,文章提供了丰富的代码示例和解释。

上篇我们介绍了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.调整色调饱和度


1.加载图像

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

运行结果

原图像:

除上诉方法外还可以用批处理方法处理多个图像。

2.调整图像大小

将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)

运行结果:

3.裁剪和填充图像

将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()

运行结果:

裁剪后的图像

填充后的图像

4.旋转

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()

运行结果:

5.色彩调整

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】的范围随机调整图像的亮度,所以每次运行的结果并不会一样

6.调整色调饱和度

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地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值