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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】

    本文实例讲述了Python tensorflow实现mnist手写数字识别.分享给大家供大家参考,具体如下: 非卷积实现 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data data_path = 'F:\CNN\data\mnist' mnist_data = input_data.read_data_sets(data_path,one_hot=True) #offline da

  • Python3.7安装keras和TensorFlow的教程图解

    win10 Python3.7安装keras深度学习集成包 TensorFlow 和Ubuntu下安装keras 在win10下安装 安装时必须检查你的python是否为64位,32位不支持!!! 32 位卸载 下载其中的64位在python官网 https://www.python.org/downloads/windows/ 然后在 pip install --upgrade tensorflow 如果出现错误可以手动选择下载然后安装对于3.7以上版本更适合 https://www.lfd.

  • python3.6.3安装图文教程 TensorFlow安装配置方法

    本文主要介绍Python3.6及TensorFlow的安装和配置流程. 一.Python官网下载自己电脑和系统对应的Python安装包. 网址:下载地址 一直往下拉到Files,这里我下载的是Windows x86-64 executable installer (注意:要装TensorFlow必须安装64位的Python,TensorFlow不支持32位)< 二.下载python-3.6.3-amd64.exe应用程序 下载完成后得到一个python-3.6.3-amd64.exe应用程序,右

  • Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install pytesseract ④安装autopy3: 先安装wheel:pip install wheel 下载autopy3-0.51.1-cp36-cp36m-win_amd64.whl[点击打开链接] 执行命令:pip install E:\360安全浏览器下载\autopy3-0.51.1-cp36

  • Python Tensor FLow简单使用方法实例详解

    本文实例讲述了Python Tensor FLow简单使用方法.分享给大家供大家参考,具体如下: 1.基础概念 Tensor表示张量,是一种多维数组的数据结构.Flow代表流,是指张量之间通过计算而转换的过程.TensorFLow通过一个计算图的形式表示编程过程,数据在每个节点之间流动,经过节点加工之后流向下一个节点. 计算图是一个有向图,其组成如下:节点:代表一个操作.边:代表节点之间的数据传递和控制依赖,其中实线代表两个节点之间的数据传递关系,虚线代表两个节点之间存在控制相关. 张量是所有数

  • python tensorflow学习之识别单张图片的实现的示例

    假设我们已经安装好了tensorflow. 一般在安装好tensorflow后,都会跑它的demo,而最常见的demo就是手写数字识别的demo,也就是mnist数据集. 然而我们仅仅是跑了它的demo而已,可能很多人会有和我一样的想法,如果拿来一张数字图片,如何应用我们训练的网络模型来识别出来,下面我们就以mnist的demo来实现它. 1.训练模型 首先我们要训练好模型,并且把模型model.ckpt保存到指定文件夹 saver = tf.train.Saver() saver.save(s

  • python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

    在处理图像的时候经常是读取图片以后把图片转换为灰度图.作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法. 首先导入包: import numpy as np import cv2 import tensorflow as tf from PIL import Image 方法一:在使用OpenCV读取图片的同时将图片转换为灰度图: img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE) print("cv2.imread(imgfile, cv2.I

  • Python通过TensorFLow进行线性模型训练原理与实现方法详解

    本文实例讲述了Python通过TensorFLow进行线性模型训练原理与实现方法.分享给大家供大家参考,具体如下: 1.相关概念 例如要从一个线性分布的途中抽象出其y=kx+b的分布规律 特征是输入变量,即简单线性回归中的 x 变量.简单的机器学习项目可能会使用单个特征,而比较复杂的机器学习项目可能会使用数百万个特征. 标签是我们要预测的事物,即简单线性回归中的 y 变量. 样本是指具体的数据实例.有标签样本是指具有{特征,标签}的数据,用于训练模型,总结规律.无标签样本只具有特征的数据x,通过

  • python生成tensorflow输入输出的图像格式的方法

    TensorFLow能够识别的图像文件,可以通过numpy,使用tf.Variable或者tf.placeholder加载进tensorflow:也可以通过自带函数(tf.read)读取,当图像文件过多时,一般使用pipeline通过队列的方法进行读取.下面我们介绍两种生成tensorflow的图像格式的方法,供给tensorflow的graph的输入与输出. import cv2 import numpy as np import h5py height = 460 width = 345 w

  • python使用TensorFlow进行图像处理的方法

    一.图片的放大缩小 在使用TensorFlow进行图片的放大缩小时,有三种方式: 1.tf.image.resize_nearest_neighbor():临界点插值 2.tf.image.resize_bilinear():双线性插值 3.tf.image.resize_bicubic():双立方插值算法 下面是示例代码: # encoding:utf-8 # 使用TensorFlow进行图片的放缩 import tensorflow as tf import cv2 import numpy

随机推荐