使用TensorFlow对图像进行随机旋转的实现示例


Posted in Python onJanuary 20, 2020

在使用深度学习对图像进行训练时,对图像进行随机旋转有助于提升模型泛化能力。然而之前在做旋转等预处理工作时,都是先对图像进行旋转后保存到本地,然后再输入模型进行训练,这样的过程会增加工作量,如果图片数量较多,生成旋转的图像会占用更多的空间。直接在训练过程中便对图像进行随机旋转,可有效提升工作效率节省硬盘空间。

使用TensorFlow对图像进行随机旋转如下:

TensorFlow版本为1.13.1

#-*- coding:utf-8 -*-
'''
  使用TensorFlow进行图像的随机旋转示例
'''
 
import tensorflow as tf
import numpy as np
import cv2
import matplotlib.pyplot as plt
 
 
img = cv2.imread('tf.jpg')
img = cv2.resize(img,(220,220))
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
 
def tf_rotate(input_image, min_angle = -np.pi/2, max_angle = np.pi/2):
  '''
  TensorFlow对图像进行随机旋转
  :param input_image: 图像输入
  :param min_angle: 最小旋转角度
  :param max_angle: 最大旋转角度
  :return: 旋转后的图像
  '''
  distorted_image = tf.expand_dims(input_image, 0)
  random_angles = tf.random.uniform(shape=(tf.shape(distorted_image)[0],), minval = min_angle , maxval = max_angle)
  distorted_image = tf.contrib.image.transform(
    distorted_image,
    tf.contrib.image.angles_to_projective_transforms(
      random_angles, tf.cast(tf.shape(distorted_image)[1], tf.float32), tf.cast(tf.shape(distorted_image)[2], tf.float32)
    ))
  rotate_image = tf.squeeze(distorted_image, [0])
  return rotate_image
 
global_init = tf.global_variables_initializer()
with tf.Session() as sess:
  init = tf.initialize_local_variables()
  sess.run([init, global_init])
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(coord=coord)
  image = tf.placeholder(shape=(220, 220, 3), dtype=tf.float32)
 
  rotate_image = tf_rotate(image, -np.pi/2, np.pi/2)
  output = sess.run(rotate_image, feed_dict={image:img})
  # print('output:',output)
  plt.imshow(output.astype('uint8'))
  plt.title('rotate image')
  plt.show()

结果如下:

原图:

使用TensorFlow对图像进行随机旋转的实现示例

随机旋转后的图:

使用TensorFlow对图像进行随机旋转的实现示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的闭包总结
Sep 18 Python
Python 私有函数的实例详解
Sep 11 Python
Python绘制KS曲线的实现方法
Aug 13 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
python能做什么 python的含义
Oct 12 Python
python函数不定长参数使用方法解析
Dec 14 Python
django 多数据库及分库实现方式
Apr 01 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 #Python
python各层级目录下import方法代码实例
Jan 20 #Python
Python 识别12306图片验证码物品的实现示例
Jan 20 #Python
如何基于python实现归一化处理
Jan 20 #Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 #Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 #Python
python如何通过pyqt5实现进度条
Jan 20 #Python
You might like
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
javascript类型转换示例
2014/04/29 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python实现拓扑排序的基本教程
2018/03/11 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
cf收人广告词
2014/03/14 职场文书
歌唱比赛主持词
2014/03/18 职场文书
付款委托书范本
2014/10/05 职场文书
司机个人年终总结
2015/03/03 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
创业计划书之水果店
2019/07/18 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
MySQL分区表实现按月份归类
2021/11/01 MySQL
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android