TensorFlow图像预处理函数
预处理图像

文件名: cat.jpg

读取、打印图片
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np image_raw_data = tf.gfile.FastGFile("./cat.jpg",'rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(image_raw_data) # 输出解码之后的三维矩阵。
#print(img_data.eval()) #print(img_data.get_shape())
img_data.set_shape([1797, 2673, 3])
print(img_data.get_shape()) with tf.Session() as sess:
plt.imshow(img_data.eval())
#print(img_data.get_shape().as_list())
plt.show()
调整图片大小
tf.image.convert_image_dtype
image_float = tf.image.convert_image_dtype(img_data, tf.float32) 等价于 image_float=tf.cast(img_data, tf.float32)/255
tf.image.resize_images 调整图像大小
with tf.Session() as sess:
# 如果直接以0-255范围的整数数据输入resize_images,那么输出将是0-255之间的实数,不利于后续处理。
#如果直接以0-1之间的实数数据输入resize_images,那么输出将是0-1之间的实数。 #建议在调整图片大小前,先将图片转为0-1范围的实数。
#tf.image.convert_image_dtype
#image_float=tf.cast(img_data, tf.float32)/255
image_float = tf.image.convert_image_dtype(img_data, tf.float32) resized = tf.image.resize_images(image_float, [300, 300], method=0)
#print(resized.eval())
plt.imshow(resized.eval())
plt.show()

裁剪和填充图片
tf.image.resize_image_with_crop_or_pad
# 裁剪、填充图像
with tf.Session() as sess:
#tf.image.resize_image_with_crop_or_pad 函数对原图像裁剪或填充。第一个参数为原始图像,后面两个参数为图像裁剪或填充后的大小。
# 如果原始图像的尺寸大于目标图像,则自动截取原图像居中部分;如果原图像的尺寸大于目标图像,则自动在原始图像四周填充0为背景。
croped = tf.image.resize_image_with_crop_or_pad(img_data, 1000, 1000) #截取
padded = tf.image.resize_image_with_crop_or_pad(img_data, 3000, 3000) #填充
#plt.imshow(croped.eval())
#plt.show()
plt.imshow(padded.eval())
plt.show()
通过比例裁剪图像大小
# 通过比例裁剪图像大小
# tf.image.central_crop 第一个参数为原始图像,第二个为调整比例,该比例为 (0,1] 的实数。
with tf.Session() as sess:
central_crop = tf.image.central_crop(img_data, 0.5)
plt.imshow(central_crop.eval())
plt.show()
图像翻转
# 图像翻转
with tf.Session() as sess:
# 上下翻转
flipped1 = tf.image.flip_up_down(img_data)
plt.imshow(flipped1.eval())
plt.show() # 左右翻转
flipped2 = tf.image.flip_left_right(img_data)
plt.imshow(flipped2.eval())
plt.show() #对角线翻转
transposed = tf.image.transpose_image(img_data)
plt.imshow(transposed.eval())
plt.show() # 以一定概率上下翻转图片。
# 以50%概率上下翻转图片
flipped1 = tf.image.random_flip_up_down(img_data)
plt.imshow(flipped1.eval())
plt.show() # 以一定概率左右翻转图片。
# 以50%概率左右翻转图片
flipped2 = tf.image.random_flip_left_right(img_data)
plt.imshow(flipped2.eval())
plt.show()
图像色彩调整
# 图像色彩调整
with tf.Session() as sess:
# 在进行一系列图片调整前,先将图片转换为实数形式,有利于保持计算精度。
image_float = tf.image.convert_image_dtype(img_data, tf.float32)
# 亮度调整##############################
# 将图片的亮度+0.5。
#adjusted = tf.image.adjust_brightness(image_float, 0.5) # 将图片的亮度-0.5
#adjusted = tf.image.adjust_brightness(image_float, -0.5) # 随机亮度调整
# 在[-max_delta, max_delta)的范围随机调整图片的亮度。
#adjusted = tf.image.random_brightness(image_float, max_delta=0.5)
# 对比度调整##############################
# (x-mean)*delta+mean
# 将图片的对比度+5
#adjusted = tf.image.adjust_contrast(image_float, 5) # 将图片的对比度-0.5
#adjusted = tf.image.adjust_contrast(image_float, -0.5) # 在[lower, upper]的范围随机调整图的对比度。
# upper >= lower >= 0
lower=0.5
upper=5
#adjusted = tf.image.random_contrast(image_float, lower, upper)
# 色相调整##############################
# delta 范围:[-1, +1]
#adjusted = tf.image.adjust_hue(image_float, -0.1)
#adjusted = tf.image.adjust_hue(image_float, -0.3)
#adjusted = tf.image.adjust_hue(image_float, -0.6)
#adjusted = tf.image.adjust_hue(image_float, -0.9)
#adjusted = tf.image.adjust_hue(image_float, 0.1)
#adjusted = tf.image.adjust_hue(image_float, 0.3)
#adjusted = tf.image.adjust_hue(image_float, 0.6)
#adjusted = tf.image.adjust_hue(image_float, 0.9) # 在[-max_delta, max_delta]的范围随机调整图片的色相。max_delta的取值在[0, 0.5]之间。
max_delta=0.3
#adjusted = tf.image.random_hue(image_float, max_delta)
# 饱和度调整##############################
# 将图片的饱和度-5。
#adjusted = tf.image.adjust_saturation(image_float, -5)
# 将图片的饱和度+5。
#adjusted = tf.image.adjust_saturation(image_float, 5)
# 在[lower, upper]的范围随机调整图的饱和度。
lower=0 # lower>=0
upper=5
#adjusted = tf.image.random_saturation(image_float, lower, upper)
# 将代表一张图片的三维矩阵中的数字均值变为0,方差变为1。
adjusted = tf.image.per_image_standardization(image_float)
# 在最终输出前,将实数取值截取到0-1范围内。
adjusted = tf.clip_by_value(adjusted, 0.0, 1.0)
plt.imshow(adjusted.eval())
plt.show()
TensorFlow图像预处理函数的更多相关文章
- TensorFlow图像预处理-函数
更多的基本的API请参看TensorFlow中文社区:http://www.tensorfly.cn/tfdoc/api_docs/python/array_ops.html 下面是实验的代码,可以参 ...
- TensorFlow图像预处理完整样例
参考书 <TensorFlow:实战Google深度学习框架>(第2版) 以下TensorFlow程序完成了从图像片段截取,到图像大小调整再到图像翻转及色彩调整的整个图像预处理过程. #! ...
- TensorFlow 图像预处理(一) 图像编解码,图像尺寸调整
from: https://blog.csdn.net/chaipp0607/article/details/73029923 TensorFlow提供了几类图像处理函数,下面介绍图像的编码与解码,图 ...
- 吴裕雄 python 神经网络——TensorFlow 图像预处理完整样例
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt def distort_color(image, ...
- 『TensorFlow』第九弹_图像预处理_不爱红妆爱武装
部分代码单独测试: 这里实践了图像大小调整的代码,值得注意的是格式问题: 输入输出图像时一定要使用uint8编码, 但是数据处理过程中TF会自动把编码方式调整为float32,所以输入时没问题,输出时 ...
- python+opencv 图像预处理
一 python 生成随机字符串序列+ 写入到图片上 from PIL import Image,ImageDraw,ImageFont import numpy as np import rando ...
- 基于OpenCV的火焰检测(一)——图像预处理
博主最近在做一个基于OpenCV的火焰检测的项目,不仅可以检测图片中的火焰,还可以检测视频中的火焰,最后在视频检测的基础上推广到摄像头实时检测.在做这个项目的时候,博主参考了很多相关的文献,用了很多种 ...
- [opencv]图像预处理方案及方式
像识别中,图像质量的好坏直接影响识别算法的设计与效果精度,那么除了能在算法上的优化外,预处理技术在整个项目中占有很重要的因素,然而人们往往忽略这一点. 图像预处理,将每一个文字图像分检出来交给识别模块 ...
- 深度学习03-(图像梯度处理、图像轮廓、图像预处理在AI中的应用)
深度学习03-计算机视觉基本理论2 深度学习03-(计算机视觉基本理论2) 图像梯度处理 什么是图像梯度 模板运算 均值滤波 高斯滤波 中值滤波 边沿检测 锐化 图像轮廓 什么是图像轮廓 查找和绘制轮 ...
- 图像预处理第9步:存为.bmp文件
//图像预处理第9步:将最终标准化后的字符图像分为单个单个的HDIB保存,并存为.bmp文件 void CChildView::OnImgprcToDibAndSave() { unsigned ch ...
随机推荐
- STM32 + RT-Thread + LVGL
一.基本信息 MCU:STM32F103ZET6 RT-Thread:5.0.2 LVGL:8.3.11 LCD:ST7735s 编译环境:RTThread studio 二.LVGL 移植要求 16 ...
- k8s介绍
k8s容器编排系统 k8S是谷歌几十年来研发的一套系统,更新了运维领域的玩法. 内容很多,先快速练习玩法,知道是什么就行. 具体[为什么]再花时间慢慢学吧! 0.参考资料 1. k8s能干什么 htt ...
- Spring扩展——BeanPostProcessor(BPP)
BeanPostProcess简介 在Spring中 BeanPostProcessor 是一个非常重要的接口,它用于在每个bean对象初始化前后修改Bean的属性信息,比如我们最常用的@Autowi ...
- 在System身份运行的.NET程序中以指定的用户身份启动可交互式进程
今天在技术群里,石头哥向大家提了个问题:"如何在一个以System身份运行的.NET程序(Windows Services)中,以其它活动的用户身份启动可交互式进程(桌面应用程序.控制台程序 ...
- Kubernetes(三)实战入门
实战入门 本章介绍如何在kubernetes集群中部署一个nginx服务,并能够对其进行访问. 1. Namespace Namespace主要作用是实现多套环境的资源隔离或者多租户的资源隔离. 默认 ...
- 【冷启动#2】实用的springboot tutorial入门demo
跟着官方文档熟悉一遍创建spring工程的步骤 https://spring.io/guides/gs/spring-boot https://juejin.cn/post/7077958723829 ...
- Spark3学习【基于Java】2. Spark-Sql核心概念
SparkSession 从Spark2开始,Spark-SQL引入了SparkSession这个核心类,它是处理DataSet等结构数据的入口.在2.0之前,使用的是spark-core里的Spar ...
- Golang channel底层是如何实现的?(深度好文)
Hi 你好,我是k哥.大厂搬砖6年的后端程序员. 我们知道,Go语言为了方便使用者,提供了简单.安全的协程数据同步和通信机制,channel.那我们知道channel底层是如何实现的吗?今天k哥就来聊 ...
- Java子类是否能继承父类上的注解
子类可以继承到父类上的注解吗? 在编写自定义注解时,可以通过指定@Inherited注解,申明自定义注解是否可以被继承:@Inherited只能实现类上的注解继承. 实现情况可细分为以下几种 未申明@ ...
- Java权限认证框架比较
认证.授权.鉴权和权限控制 定义 英文 实现方式 认证 确认声明者的身份 identification 根据声明者独特的识别信息 授权 获取用户的委派权限 authorization 颁发一个授信媒介 ...