【TensorFlow】图片预处理函数

旧城冷巷雨未停 提交于 2019-12-14 06:08:27

Python版本:3.6
TensorFlow版本:1.12.0
Matplotlib版本:3.1.1

tf.gfile.FastGFile() 读取图像
tf.image.resize_images()图像大小调整
tf.image.resize_image_with_crop_or_pad()图像裁剪或填充
tf.image.central_crop()按比例调整图像
flipped = tf.image.flip_up_down(img_data):图像上下翻转
flipped = tf.image.flip_left_right(img_data):图像左右翻转
flipped = tf.image.transpose_image(img_data):图像对角翻转

1、tf.gfile.FastGFile()

功能:读取图片
tf.gfile.FastGFile(path,decodestyle)
path:图片所在路径(如:E:/album/corgi.jpeg)
decodestyle:图片的解码方式。(‘r’:UTF-8编码; ‘rb’:非UTF-8编码)
代码1

import tensorflow as tf
import matplotlib.pyplot as plt

# 读取图片
img_raw_data = tf.gfile.FastGFile("E:/album/corgi.jpeg", 'rb').read()

with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(img_raw_data)      # 图像解码
    print(img_data.eval())  # 打印解码后的图像,三维矩阵

    plt.imshow(img_data.eval())
    plt.show

读取的图片类型为jpeg,如果读取的图片类型为png,可以使用img_data = tf.image.decode_png(img_raw_data)进行解码。

如果代码1无法显示图像,请尝试使用代码2。

代码2
matplotlib还提供了一个名为pylab的模块,其中包括了许多NumPypyplot模块中常用的函数,方便用户快速进行计算和绘图。

通过import pylab导入,并将代码1的plt.show()换成pylab.show()

import tensorflow as tf
import matplotlib.pyplot as plt
import pylab

# 读取图片
img_raw_data = tf.gfile.FastGFile("E:/album/corgi.jpeg", 'rb').read()

with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(img_raw_data)      # 图像解码
    print(img_data.eval())  # 打印解码后的图像,三维矩阵

    plt.imshow(img_data.eval())
    pylab.show()

效果
在这里插入图片描述

2、tf.image.resize_images()

功能:调整图像大小
img_data_resize1 = tf.image.resize_images(img_data, [x, y], method=0)
img_data:原始图像(像素值在0.0-1.0范围内)
[x, y]:目标图像的大小
method=0:调整图像大小的算法

Mehod取值 图像大小调整算法
0 双线性插值法(Bilinear interpolation)
1 最近邻居法(Nearest neighbor interpolation)
2 双三次插值法(Bicubic interpolation)
3 面积插值法(Area interpolation)

代码

import tensorflow as tf
import matplotlib.pyplot as plt

# 读取图片
img_raw_data = tf.gfile.FastGFile("E:/album/corgi.jpeg", 'rb').read()

with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(img_raw_data)      # 图像解码
    print(img_data.eval())  # 打印解码后的图像,三维矩阵

    plt.imshow(img_data.eval())
    plt.show()

    # 将0-255的像素值转化为0.0-1.0范围内的实数。
    img_data_float = tf.image.convert_image_dtype(img_data, dtype=tf.float32)
    img_data_resize = tf.image.resize_images(img_data_float, [300, 300], method=0)

    plt.imshow(img_data_resize.eval())
    plt.show()

效果
在这里插入图片描述

3、tf.resize_image_with_crop_or_pad()

功能:裁剪或填充图像,
tf.image.resize_image_with_crop_or_pad(img_data, x, y)
img_data:原始图像。
xy:目标图像的大小。

如果原始图像尺寸大于目标图像,那么函数会自动截取原始图像居中的部分;如果原始图像尺寸小于目标图像,那么函数会自动在原始图像的四周填充0背景。

代码

import tensorflow as tf
import matplotlib.pyplot as plt

# 读取图片
img_raw_data = tf.gfile.FastGFile("E:/album/corgi.jpeg", 'rb').read()

with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(img_raw_data)      # 图像解码
    print(img_data.eval())  # 打印解码后的图像,三维矩阵

    plt.imshow(img_data.eval())
    plt.show()

    croped = tf.image.resize_image_with_crop_or_pad(img_data, 300, 300)
    padded = tf.image.resize_image_with_crop_or_pad(img_data, 2000, 2000)

    plt.imshow(croped.eval())
    plt.show()
    plt.imshow(padded.eval())
    plt.show()

效果
在这里插入图片描述

4、tf.image.central_crop()

功能:按比例调整图像(基准点为图像中心)
central_cropped = tf.image.central_crop(img_data, alpha)
img_data:原始图像。
alpha:比例系数,取值范围 (0,1](0,1]

代码

import tensorflow as tf
import matplotlib.pyplot as plt

# 读取图片
img_raw_data = tf.gfile.FastGFile("E:/album/corgi.jpeg", 'rb').read()

with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(img_raw_data)      # 图像解码
    print(img_data.eval())  # 打印解码后的图像,三维矩阵

    central_cropped = tf.image.central_crop(img_data, 0.5)
    plt.imshow(central_cropped.eval())
    plt.show()

效果在这里插入图片描述

5、图像翻转

功能:图像翻转
flipped = tf.image.flip_up_down(img_data):图像上下翻转
flipped = tf.image.flip_left_right(img_data):图像左右翻转
flipped = tf.image.transpose_image(img_data):图像对角翻转

代码

import tensorflow as tf
import matplotlib.pyplot as plt

# 读取图片
img_raw_data = tf.gfile.FastGFile("E:/album/corgi.jpeg", 'rb').read()

with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(img_raw_data)      # 图像解码
    print(img_data.eval())  # 打印解码后的图像,三维矩阵

    flipped_1 = tf.image.flip_up_down(img_data)  # 上下翻转
    flipped_2 = tf.image.flip_left_right(img_data)  # 左右翻转
    flipped_3 = tf.image.transpose_image(img_data)  # 对角线翻转

    fig = plt.figure()

    img = fig.add_subplot(221)
    plt.imshow(img_data.eval())

    img = fig.add_subplot(222)
    plt.imshow(flipped_1.eval())

    img = fig.add_subplot(223)
    plt.imshow(flipped_2.eval())

    img = fig.add_subplot(224)
    plt.imshow(flipped_3.eval())

    plt.show()

效果
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!