Python基于Tensor FLow的图像处理操作详解


Posted in Python onJanuary 15, 2020

本文实例讲述了Python基于Tensor FLow的图像处理操作。分享给大家供大家参考,具体如下:

在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数据进行处理使其变成一张新的图片,在此基础上进行学习,从而提高网络识别的准确率。

1、图像解码显示

利用matplot库可以方便简洁地在jupyter内对图片进行绘制与输出,首先通过tf.gfile打开图片文件,并利用函数tf.image.decode_jpeg将jpeg图片解码为三位矩阵,之后便可以通过matplot绘制与显示图片信息了

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
 
#读取图像文件
image_raw=tf.gfile.GFile('D:\Temp\MachineLearning\data\cat.jpeg','rb').read()
 
with tf.Session() as sess:
  #对jpeg图像解码得到图像的三位矩阵数据
  image_data=tf.image.decode_jpeg(image_raw)
  print(image_data.eval())
  plt.imshow(image_data.eval())
  plt.show()

可以看到打印的图片三维矩阵信息和显示的图片:

Python基于Tensor FLow的图像处理操作详解                             Python基于Tensor FLow的图像处理操作详解

2、图像缩放

tensorflow还自带了许多图像处理函数,比如resize_image对图片进行大小的缩放。其中第一个参数代表图片数据源,第二个数组代表缩放后的大小,第三个method代表采用的缩放方法,默认0是双线性插值法,1代表最近邻插值法,2代表双立方插值法,3代表像素区域插值法。

#对图片大小进行缩放
  image_resize=tf.image.resize_images(image_data,[500,500],method=0)
  #tensorflow处理后的图片是float32格式的,需要转化为uint8才能正确输出
  image_resize=np.asarray(image_resize.eval(),dtype='uint8')
  plt.imshow(image_resize)
  plt.show()

3、图像裁切

函数tf.image.resize_image_with_crop_or_pad可以在保证图片原始比例的条件下对图片进行裁切或填充。

函数tf.image.random_crop是随机对图片进行选取裁剪,而不是以中心。

#图片裁剪
  image_crop=tf.image.resize_image_with_crop_or_pad(image_data,500,500)
  plt.imshow(image_crop.eval())
  plt.show()
  #随机裁剪
  img_random=tf.image.random_crop(image_data,[300,300,3])
  plt.imshow(img_random.eval())
  plt.show()

Python基于Tensor FLow的图像处理操作详解                               Python基于Tensor FLow的图像处理操作详解

resize_image_with_crop_or_pad第一个参数是图片资源,后两个参数是裁切后的图片大小,当原始图片大于目标值时将裁去两边多余部分,当图片小于目标值时将用黑色填充,例如上图左右被裁剪,上下用黑色填充。

random_crop第一个参数是图片资源,第二个参数是一个三位张量,代表目标图像大小。

4、图像翻转

通过函数实现图片的上下、左右翻转,在模型训练时,可以将原本的样本图片进行反转,作为新的特征值进行输入供模型训练。

#上下翻转
  img_down=tf.image.flip_up_down(image_data)
  plt.imshow(img_down.eval())
  plt.show()
  
  #左右翻转
  img_left=tf.image.flip_left_right(image_data)
  plt.imshow(img_left.eval())
  plt.show()

5、调整对比度、明度、饱和度

通过tf.image.adjust_contrast可以对图像对比度进行调整,当参数大于1代表加深,小于1代表减淡

tf.image.random_contrast可以在指定范围内随即调整对比度

类似的还有adjust_brightness、adjust_saturation、adjust_hue对明度、饱和度、色相进行调整

#加深对比度
  img_deep=tf.image.adjust_contrast(image_data,2)
  plt.imshow(img_deep.eval())
  plt.show()
  #降低对比度
  img_fade=tf.image.adjust_contrast(image_data,0.5)
  plt.imshow(img_fade.eval())
  plt.show()
  #随机对比度
  img_contrast=tf.image.random_contrast(image_data,0.5,2)
  plt.imshow(img_contrast.eval())
  plt.show()

6、对VGG网络的输入图片进行处理

Vgg网络训练中传入的图片参数x_img是以batch_size为单位的四维数据,例如传入20张32×32的3通道图片,其数据为[20,32,32,3]。但是tensorflow的图片处理函数只可以处理三维的单张图片。因此需要首先通过split()函数将20张图片拆分成单张[1,32,32,3],再通过reshape()函数转化为三维数据[32,32,3],之后再调用图片处理函数对图片进行处理,将处理后的图片恢复成四维,然后放在数组res_arr中,拼接成原来的一组20×32×32×3的数据。

# 将一批batch_size张图片在第一维上切分为单张图片
img_arr=tf.split(x_img,batch_size,axis=0)
res_arr=[]
# 遍历每个图片对其进行处理
for img in img_arr:
  # 将单张四维的图片[1,32,32,3]处理成三维[32,32,3]
  img=tf.reshape(img,[32,32,3])
  # 对单张图片进行图像增强
  img_flip=tf.image.random_flip_left_right(img)   # 翻转图片
  img_bright=tf.image.random_brightness(img_flip,max_delta=63)  # 随机调整亮度
  img_contrast=tf.image.random_contrast(img_bright,lower=0.2, upper=1.8) # 调整对比度
  # 将增强后的图片再变回原来的四维格式
  img=tf.reshape(img_contrast,[1,32,32,3])
  # 将每个处理后的图片放在一个数组
  res_arr.append(img)
# 将处理后的单个图片重新拼接在一起  
img_aug=tf.concat(res_arr,axis=0)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python如何导入依赖包
Jul 13 Python
Python爬取某平台短视频的方法
Feb 08 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 #Python
Pytorch模型转onnx模型实例
Jan 15 #Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 #Python
详解Python实现进度条的4种方式
Jan 15 #Python
pytorch常见的Tensor类型详解
Jan 15 #Python
pytorch 常用线性函数详解
Jan 15 #Python
python3.8下载及安装步骤详解
Jan 15 #Python
You might like
php中$this->含义分析
2009/11/29 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
Python编程求质数实例代码
2018/01/31 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python 项目转化为so文件实例
2019/12/23 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
如何理解Python中的变量
2020/06/01 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
学术会议邀请函范文
2014/01/22 职场文书
模具专业自荐信
2014/05/29 职场文书
服务承诺书
2015/01/19 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python