本文实例讲述了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()

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

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

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加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

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

本文标题: Python基于Tensor FLow的图像处理操作详解

本文地址: http://www.cppcns.com/jiaoben/python/298469.html

python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解相关推荐

  1. python图像处理教程_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

  2. python模拟购物车购物过程_Python基于数列实现购物车程序过程详解

    要求 1.启动程序后让用户输入余额,并打印商品列表 2.用户通过输入编号购买商品 3.用户选择商品购买后,根据余额判断成功或者失败,给出对应提示 4.可以随时退出,退出后打印账号余额以及购买的商品列表 ...

  3. python中int转换为时间戳_python日期和时间戳互相转化操作详解

    Python中日期格式化是非常常见的操作,Python 中能用很多方式处理日期和时间,转换日期格式是一个常见的功能.Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时 ...

  4. python字符串strip的作用_Python字符串函数strip()原理及用法详解

    Python字符串函数strip()原理及用法详解 strip:用于移除字符串头尾指定的字符(默认为空格)或字符序列.注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符. 语法:str.s ...

  5. python内置序列类型_Python序列内置类型之元组类型详解

    Python序列内置类型之元组类型详解 1.元祖的概念 Python中的元组与列表类似,都是一个序列,不同的是元组的元素不能修改而已. 2.元组的创建 元组使用小括号,列表使用方括号. tup = ( ...

  6. python代码覆盖率怎么统计的_Python代码覆盖率统计工具coverage.py用法详解

    1.安装coverage pip install coverage 安装完成后,会在Python环境下的\Scripts下看到coverage.exe: 2.Coverage 命令行 coverage ...

  7. python生成二维码_python生成二维码的实例详解

    python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...

  8. python中index什么意思_Python中index()和seek()的用法(详解)

    1.index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如: >>> t=tuple('Allen') >>> t ('A', 'l ...

  9. python爬虫常见报错_Python爬虫常见HTTP响应状态码详解

    在使用Python进行网页数据抓取时,经常会遇到无数据返还或错误等异常,这个时候可以通过status_code命令来查看获得http请求返回的状态码,以便查找原因并制定相应的解决方案.import r ...

最新文章

  1. Spring中jdbcTemplate的用法实例
  2. 其他算法-Dijkstra
  3. Ubuntu14.04 x64 zabbix 3.0 安装
  4. Django 和 Ajax 简介
  5. 微信小程序自定义组件实现
  6. 传说中的window8 的种子
  7. centos8启动zk集群失败:zk Error contacting service. It is probably not running.
  8. ictclas4j 分词工具包 安装流程
  9. 一段字符串修改某一个位置的值
  10. 汇编语言---判断字符
  11. python项目目录结构
  12. 一体机扫描文档FTP搭建全程
  13. C/C++ 找出最大素数 算法
  14. webApp用户体验优化——quickClick
  15. 谷歌浏览器设置跨域方法集合
  16. 网络安全03_推荐书籍_网络安全工具_搜集到的网络安全学习的建议_Web安全/渗透测试技能要求_国内外安全企业网站
  17. 跟我读论文系列之XGBoost
  18. 贪玩蓝月-大漠模拟脚本源码
  19. ionic学习笔记2
  20. 第三方服务之Bmob——答题系统小项目

热门文章

  1. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals
  2. C语言网络编程:socket函数
  3. 测试linux下磁盘的读写速率
  4. python练习:猜价钱小游戏
  5. Y15BeTa蜂鸣器唱歌程序-演奏版
  6. Milking Cows 挤牛奶
  7. js-ES6学习笔记-module(4)
  8. Babel 相关资料
  9. Android网络编程系列 一 Socket抽象层
  10. 2014年个人工作总结