TensorFlow提供了一些常用的图像处理接口,可以让我们方便的对图像数据进行操作,以下首先给出一段显示原始图片的代码,然后在此基础上,实践TensorFlow的不同API。

显示原始图片

 import matplotlib.pyplot as plt
import tensorflow as tf raw_data = tf.gfile.FastGFile('./new.jpg','rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(raw_data)
plt.imshow(img_data.eval())
plt.show()

运行效果如下图:

其中tf.gfile.FastGFile,用于读取本地文件,tf.image.decode_jpeg用于将jpeg图片原始数据解码到3-D张量空间,即width, height, channel,最后调用pyplt库显示图片。

图像的缩放

 import matplotlib.pyplot as plt
import tensorflow as tf raw_data = tf.gfile.FastGFile('./new.jpg','rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(raw_data)
img_data2 = tf.cast(tf.image.resize_images(img_data, [200, 200]), dtype=tf.uint8);
plt.imshow(img_data2.eval())
plt.show()

TensorFlow缩放图片的接口是tf.image.resize_images,[200, 200]是缩放后的目标尺寸,这里调用了tf.cast这个类型转换函数,因为经过缩放处理后,张量类型为float32,而pyplt对图像格式要求uint8,所以必须转一下,否则什么效果,可以自己试一下。

tf.image.resize_images接口可以指定不同的缩放算法,比如:

tf.image.resize_images(img_data, [200, 200], method=tf.image.ResizeMethod.BICUBIC)

图像的反转

图像的反转在各路深度学习算法中就用的比较多了,主要是通过这种操作可以扩大样本的数量,何乐不为。

 import matplotlib.pyplot as plt
import tensorflow as tf raw_data = tf.gfile.FastGFile('./new.jpg','rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(raw_data)
img_data2 = tf.cast(tf.image.flip_left_right(img_data), dtype=tf.uint8)
plt.imshow(img_data2.eval())
plt.show()

上述代码调用了左右反转接口,TensorFlow还提供了上下反转及随机反转的操作,不再一一尝试。

图像的裁剪

中心裁剪

 import matplotlib.pyplot as plt
import tensorflow as tf raw_data = tf.gfile.FastGFile('./new.jpg','rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(raw_data)
img_data2 = tf.cast(tf.image.resize_image_with_crop_or_pad(img_data, 200, 200), dtype=tf.uint8)
plt.imshow(img_data2.eval())
plt.show()
tf.image.resize_image_with_crop_or_pad函数可以用来进行图像裁剪或扩展,这个是由用户的目标宽度和高度决定的,另外无论是裁剪还是扩展都是从图片中心为基准的。

指定位置裁剪

 import matplotlib.pyplot as plt
import tensorflow as tf raw_data = tf.gfile.FastGFile('./new.jpg','rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(raw_data)
img_data2 = tf.cast(tf.image.crop_to_bounding_box(img_data, 0, 0, 200, 200), dtype=tf.uint8)
plt.imshow(img_data2.eval())
plt.show() ~

上述代码指定左上角的200px方形box进行裁剪,指定目标范围必须合理,否则会产生异常。

图像上画框

 import matplotlib.pyplot as plt
import tensorflow as tf raw_data = tf.gfile.FastGFile('./new.jpg','rb').read() with tf.Session() as sess:
img_data = tf.cast(tf.expand_dims(tf.image.decode_jpeg(raw_data), 0), tf.float32)
boxes = tf.constant([[[0.4, 0.4, 0.5, 0.5], [0.5, 0.5, 0.6, 0.6]]])
img_data2 = tf.cast(tf.image.draw_bounding_boxes(img_data, boxes), dtype=tf.uint8)
plt.imshow(img_data2.eval()[0])
plt.show()

这段代码有几个地方要注意一下,在jpeg解码后,调用了tf.expand_dims,这个函数的意思是在指定的位置增加一个维度,因为解码后是3维数据,在0位置增加一维,事实上增加了一个batch维度,如此操作主要是为了迎合后面的画框函数!boxes操作节点定义了两个方框,用0~1的浮点数标识box的位置比例,最后的图片显示位置也要注意,输出是四维,请取出第一个图片显示。下图为显示效果,手工放大图片后的效果,否则,1px方框在plt中可能被缩略掉,请注意!

												

TensorFlow图像处理API的更多相关文章

  1. tensorflow models api:ValueError: Tensor conversion requested dtype string for Tensor with dtype float32: 'Tensor("arg0:0", shape=(), dtype=float32, device=/device:CPU:0)'

    tensorflow models api:ValueError: Tensor conversion requested dtype string for Tensor with dtype flo ...

  2. Tensorflow图像处理

    Tensorflow图像处理主要包括:调整尺寸,图像翻转,调整色彩,处理标注框. 代码如下: #coding=utf-8 import matplotlib.pyplot as plt import ...

  3. TensorFlow dataset API 使用

    # TensorFlow dataset API 使用 由于本人感兴趣的是自然语言处理,所以下面有关dataset API 的使用偏向于变长数据的处理. 1. 从迭代器中引入数据 import num ...

  4. TensorFlow - 相关 API

    来自:https://cloud.tencent.com/developer/labs/lab/10324 TensorFlow - 相关 API TensorFlow 相关函数理解 任务时间:时间未 ...

  5. TensorFlow — 相关 API

    TensorFlow — 相关 API TensorFlow 相关函数理解 任务时间:时间未知 tf.truncated_normal truncated_normal( shape, mean=0. ...

  6. 开源框架---tensorflow c++ API 一个卡了很久的问题

    <开源框架---tensorflow c++ API 运行第一个“手写字的例子”> 中可以说明tensorflow c++ API是好用的,.......

  7. 开源框架---通过Bazel编译使用tensorflow c++ API 记录

    开源框架---通过Bazel编译使用tensorflow c++ API 记录 tensorflow python API,在python中借用pip安装tensorflow,真的很方便,几句指令就完 ...

  8. TensorFlow Keras API用法

    TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...

  9. tensorflow estimator API小栗子

    TensorFlow的高级机器学习API(tf.estimator)可以轻松配置,训练和评估各种机器学习模型. 在本教程中,您将使用tf.estimator构建一个神经网络分类器,并在Iris数据集上 ...

随机推荐

  1. JavaScript进阶(十)Array 数组详解

    JS array 数组详解 数组的声明方法 arrayObj = new Array(); 的数组 ,并且第一位是5 数组的运算(传地址) var t2=new Array(); t2[0]=1; t ...

  2. Android启动过程分析

    Android系统启动过程 首先看一张Android框架结构图 Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动的过程如下图所示:(图片来自网上, ...

  3. Eclipse 创建 Maven 项目、Maven JavaWeb 项目

    Eclipse 创建 Maven 项目         新建一个maven项目          (默认)(如果不行第一个Create a simple ... 也选中) 默认         Jav ...

  4. (三十四)NavigationController初步

    为了了解底层,首先不基于UIWindow而基于UIWindow来创建App. 由于Xcode6没有以前的基于UIWindow的空项目,所以选择SingleView,然后删除storyboard,移除B ...

  5. sharedpreferences如何保存对象

    昨天做了一个搜索历史的功能,然后根据搜索的历史可以调回到上一个页面,这里涉及到一个用sharedpreferences保存对象的问题,sharedpreferences是不能够直接保存对象的,我们需要 ...

  6. UML之活动图

    活动图,她的英文名字叫Activity Diagram,是一种说明业务用例实现的工作流程,活动图是UML大家族中用于对系统的动态方面建模的无中图之一. 举个简单的例子,以建房的工作流为例,首先,我们要 ...

  7. 集群增量会话管理器——DeltaManager

    DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章 ...

  8. Volley网络框架完全解析(实战篇)

    好了,今天就通过一个瀑布流demo,来使用Volley框架请求网络图片. 前言: 我们使用NetworkImageView显示图片: 1.因为该控件可以自动的管理好请求的生命周期,当与父控件detac ...

  9. 遗传算法解决TSP问题实现以及与最小生成树的对比

    摘要: 本实验采用遗传算法实现了旅行商问题的模拟求解,并在同等规模问题上用最小生成树算法做了一定的对比工作.遗传算法在计算时间和占用内存上,都远远优于最小生成树算法. 程序采用Microsoft vi ...

  10. Jedis对Redis的常用命令操作

    本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项 ...