【Tensorflow】图像的读取、解码、显示、处理、编码、保存

您所在的位置:网站首页 png是什么图像 【Tensorflow】图像的读取、解码、显示、处理、编码、保存

【Tensorflow】图像的读取、解码、显示、处理、编码、保存

2024-07-10 16:09| 来源: 网络整理| 查看: 265

声明,文章中参考别人的内容,都已标明原文链接。

Tensorflow图像的读取、解码、显示、处理、编码、保存

1. Tensorflow读取图像文件后为什么要解码? 我们常见的图像格式有 .bmp,.gif,.jpg,.png等,而.bmp格式的图像是没有经过压缩的,其他3种都是经过编码压缩格式。所以在读取之后要进行解码还原。

2. 图像解码与编码 一张RGB三通道的彩色图像可以看成一个三维矩阵,矩阵中不同位置上的数字代表图像的像素值。然后图像在存储时并不是直接记录这些矩阵中的数字,而是经过了压缩编码。所以将一张图像还原成一个三维矩阵的过程就是解码的过程,反之就是编码了。其实如果大家熟悉opencv的话,imread和imwrite就是一个解码和编码的过程。 https://blog.csdn.net/chaipp0607/article/details/73029923

3. 代码例子解释(为了进一步理解解码的意义) http://yueshi.me/?p=270

"""读取图片文件""" File1 = tf.read_file('image.jpg') """解码图片,png格式用tf.image.decode_png, channels=3表示RGB,1表示灰度""" image = tf.image.decode_jpeg(file1, channels=3) """调整图片大小,size=[new_height, new_width]""" image = tf.image.resize_images(image, size=[32,32]) """转化图片转化为float32类型,并缩放到[0,1]之间, 也可使用 tf.cast(image, tf.float32)/255(一般图片类型最大值为255)""" image = tf.image.convert_image_dtype(image, tf.float32)

下面逐句解释一下代码 file1 = tf.read_file('image.jpg') 功能:读取和输出文件中的全部内容 输入:一个0维的字符串类型的张量(即字符串) 输出:图像文件中的所有内容(字符串) image = tf.image.decode_jpeg(file1, channels=3) 功能:将编码的图像解码为uint8或uint16类型的张量(二维或三维矩阵) 输入:读取的图像文件,0维的字符串类型的张量(即字符串) 输出:uint8或uint16类型的张量 channels=3表示RGB图像 channels=1表示灰度图像 channels=0表示jpeg编码的图像的通道数 image = tf.image.resize_images(image, size=[32,32]) 功能:使用指定的方法将图像调整为指定大小(这个方法会扭曲图像) 输入:images: 4维张量,[ batch, height, width, channels ] 3维张量,[ height, width, channels ] size:一个包含2个元素的一维int32张量,[ new_height, new_width ] 输出:新size的图像(张量) image = tf.image.convert_image_dtype(image, tf.float32) 功能:转换数据类型,在强制转换之前适当地缩放值。使用浮点值表示的图像的值应在范围[0,1]内。存储在整数数据类型中的图像数据的值应在范围[0,max],其中max是该数据类型最大的可表示正数。

4、Tensorflow中读取图像的方法

(1)通过tf.gfile.FastGFile()读取图像文件(得到bytes类型数据) image_raw = tf.gfile.FastGFile(‘test.jpg’,‘rb’).read() # 读入二进制文件 img = tf.image.decode_jpeg(image_raw) # 解码为tf中的图像格式tensor

tf.gfile模块提供了tensorflow中通用的文件I/O操作。 tf.gfile.FastGFile(filename, mode)函数用于获取文件操作句柄,类似于python中的文本操作open()函数。第一个参数filename是文件路径,第二个参数mode是文件编码方式(‘r’:UTF-8编码;‘rb’:非UTF-8编码)。 (2)通过tf.read_file()读入图像文件(得到string类型的tensor) image_value = tf.read_file(‘test.jpg’) img = tf.image.decode_jpeg(image_value, channels=3) (3)通过scipy.misc.imread()函数读入图像文件(得到ndarray) img = scipy.misc.imread(‘image/13.png’, mode=‘RGB’) (4)通过tf.train.string_input_producer()+tf.WholeFileReader().read()读入图像文件(这个方法适用于读取的图片数据过多,如果一次性读入内存吃不消)参考https://www.cnblogs.com/polly333/p/7481685.html (5)图像读取方法当然还有其它方法,但是这几种在tensorflow中是比较常用的

5、Tensorflow中图像显示的方法

5.0 tensor和array tensor转array:a.eval() array转tensor:tf.convert_to_tensor(b) 注意,显示图像时,不能是tensor,可以是array

5.1 在tensorflow中用Matplotlib显示图像 Matplotlib(绘图+可视化)。Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。简单说,可以画各种图:散点图、曲线图、直方图、饼图等,将数据可视化;可以对图像进行显示和处理。

plt.figure(fig.1) plt.imshow(image) plt.show()

下面逐句解释一下代码 plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True) 功能:新建画布

num:图像编号或名称,数字为编号 ,字符串为名称figsize:指定figure的宽和高,单位为英寸;dpi:指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80facecolor:背景颜色edgecolor:边框颜色frameon:是否显示边框

plt.imshow(image,cmap=None) image:要绘制的图像或数组,如果是张tensor要转化为array。 cmap:颜色图谱(colormap), 默认绘制为RGB(A)颜色空间。

注意注意注意 plt绘制灰度图格式必须是(height,width),而不能是(height,width,1);绘制彩色图像格式是(height,width,channels)。tensorflow读取图像数据时,会得到(height,width,channels)的格式,即彩色图是(height,width,3),灰度图是(height,width,1),所以这种情况下直接用plt绘制灰度图会报错(TypeError: Invalid dimensions for image data),为了让plt绘制出来灰度图我们需要把它reshape成(height,width)格式。

5.2 在tensorflow中用OpenCV显示图像

OpenCV(Open Source Computer Vision Library)OpenCV是一个开源的计算机视觉库,它提供了很多函数,这些函数实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口。OpenCV 是跨平台的,可以在 Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。 cv2.namedWindow('image', cv2.WINDOW_KEEPRATIO) cv2.imshow('image', img_) cv2.waitKey(0)

cv2.namedWindow(winname,flags=None) 功能:创建一个窗口,用于显示图像,可以通过其winname参数引用这个窗口,也是窗口的标题。 内置flags,用来指定窗口显示格式 cv2.WINDOW_NORMAL 窗口大小可改变 cv2.WINDOW_AUTOSIZE 窗口大小不可改变 cv2.WINDOW_FREERATIO 自适应比例 cv2.WINDOW_KEEPRATIO 保持比例饿 cv2.imshow(winname,mat) 功能:在指定的winname窗口中显示图像 Mat类是用于保存图像以及其他矩阵数据的数据结构,这里的mat可以是array类型,不能是tensor类型。 cv2.waitKey(0) 功能:控制图像显示持续的时间 如果是0,就会一直显示,知道你任意按下一个键或者把它叉掉又或者你把程序杀掉。 如果是一个正整数,比如25,那么图像就显示25秒后自动消失。

6、Tensorflow中图像保存的方法

6.2 在tensorflow中用matplotlib保存图像 plt.imsave(fname,arr) 功能:将数组保存为图像文件 fname:要保存的文件名(包括路径和扩展名),array类型数据,形状可以是MxN,MxNx3 (RGB)或MxNx4 (RGBA) 6.1 在tensorflow中用OpenCV保存图像 cv2.imwrite(filename,img,params=None) 功能:保存图像到指定文件夹和指定文件名 filename:要保存的文件名(包括路径和扩展名),img要保存的图像。 可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别,默认为3

7、 python的图像处理模块PIL(Python Imaging Library),Pillow PIL是Python平台上图像处理标准库,功能强大,使用简单。PIL默认仅支持到Python2.7,如果要支持Python3.x版本,必须使用兼容PIL的新版本–Pillow,Pillow中加入了相比于PIL更多的新特性。

from PIL import Image as im img = im.open('image/13.png') img.show() img.save("image/img.png")


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3