TensorFlow图像处理API
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的更多相关文章
- 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 ...
- Tensorflow图像处理
Tensorflow图像处理主要包括:调整尺寸,图像翻转,调整色彩,处理标注框. 代码如下: #coding=utf-8 import matplotlib.pyplot as plt import ...
- TensorFlow dataset API 使用
# TensorFlow dataset API 使用 由于本人感兴趣的是自然语言处理,所以下面有关dataset API 的使用偏向于变长数据的处理. 1. 从迭代器中引入数据 import num ...
- TensorFlow - 相关 API
来自:https://cloud.tencent.com/developer/labs/lab/10324 TensorFlow - 相关 API TensorFlow 相关函数理解 任务时间:时间未 ...
- TensorFlow — 相关 API
TensorFlow — 相关 API TensorFlow 相关函数理解 任务时间:时间未知 tf.truncated_normal truncated_normal( shape, mean=0. ...
- 开源框架---tensorflow c++ API 一个卡了很久的问题
<开源框架---tensorflow c++ API 运行第一个“手写字的例子”> 中可以说明tensorflow c++ API是好用的,.......
- 开源框架---通过Bazel编译使用tensorflow c++ API 记录
开源框架---通过Bazel编译使用tensorflow c++ API 记录 tensorflow python API,在python中借用pip安装tensorflow,真的很方便,几句指令就完 ...
- TensorFlow Keras API用法
TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...
- tensorflow estimator API小栗子
TensorFlow的高级机器学习API(tf.estimator)可以轻松配置,训练和评估各种机器学习模型. 在本教程中,您将使用tf.estimator构建一个神经网络分类器,并在Iris数据集上 ...
随机推荐
- 【一天一道LeetCode】#69. Sqrt(x)
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Impleme ...
- TCP状态转换
最近笔试遇到一个题目:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解.只要理解了下面的状态转换图,很容易回答上述问题. 在此,将& ...
- Rust语言
Rust语言 https://doc.rust-lang.org/stable/book/ http://www.phperz.com/article/15/0717/141560.html Rust ...
- 《java入门第一季》之eclipse快捷键
Eclipse快捷键大全(转载) Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当 ...
- gdb学习(一)[第二版]
概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式) ...
- 【OpenCV学习】Kmean均值聚类对图片进行减色处理
#include <cv.h> #include <highgui.h> #include <iostream> #define MAX_CLUST ...
- OpenCV 实现分水岭算法
种子点的标记没有太搞懂,这个算法的速度还是很快的 // watershed_test20140801.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h&q ...
- Boyer-Moore算法
1.概述 在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前相当有效又容易理解的一种,一般情况下,比KMP算法快3-5倍. BM算法在移动模式串的时候是从左到右,而进行比较的时候是 ...
- linux 下使用 tc 模拟网络延迟和丢包
1 模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带 ...
- 用js来实现那些数据结构14(树02-AVL树)
在使用二叉搜索树的时候会出现 一个问题,就是树的一条分支会有很多层,而其他的分支却只有几层,就像下面这样: 如果数据量够大,那么我们在某条边上进行增删改查的操作时,就会消耗大量的时间.我们花费精力去构 ...