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 相关文章推荐
python代码检查工具pylint 让你的python更规范
Sep 05 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
Python实现中一次读取多个值的方法
Apr 22 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
使用python模拟高斯分布例子
Dec 09 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
Python print不能立即打印的解决方式
Feb 19 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Python环境搭建过程从安装到Hello World
Feb 05 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
图形数字验证代码
2006/10/09 PHP
php中的实现trim函数代码
2007/03/19 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
jquery ready函数源代码研究
2009/12/06 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
python——全排列数的生成方式
2020/02/26 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
python tkinter实现连连看游戏
2020/11/16 Python
生物科学专业个人求职信范文
2013/12/05 职场文书
小学生学习感言
2014/03/10 职场文书
初中学生评语大全
2014/04/24 职场文书
健康状况证明模板
2014/10/23 职场文书
银行竞聘报告范文
2014/11/06 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL