图片读取案例|学习笔记

简介: 快速学习图片读取案例

开发者学堂课程【深度学习框架 TensorFlow 入门图片读取案例学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/773/detail/13553


图片读取案例


内容介绍:

一、图像基本知识

二、图片特征值处理

三、数据格式

四、案例:狗图片读取


一、图像基本知识

特征抽取:

文本 — 数值(二维数组 shape(n_samples, m_features))

字典 — 数值(二维数组 shape(n_samples, m_features)

图片 — 数值(三维数组 shape(图片长度、图片宽度、图片通道数)

我们经常接触到的图片有两种,一种是黑白图片(灰度图),另一种是彩色图片。

组成图片的最基本单位是像素。

(1)图片三要素

组成一张图片特征值是所有的像素值,有三个维度:图片长度、图片宽度、图片通道数。

描述一个像素点,如果是灰度图,那么只需要一个数值来描述它,就是单通道。

如果一个像素点,有 RGB 三种颜色来描述它,就是三通道。

灰度图[长,宽,1]:单通道,由像素构成,每一个像素点是[0,255]的数,越接近于0越黑,越接近于255越白

彩色图片[长,宽,3]:三通道,由三个通道构成,每一个像素点用[0,255]的数表示

如果一张彩色图片的长200,宽200,通道数为3,那么总的像素数量为200*200*3。

(2)张量形状

在 TensorFlow 中如何用张量表示一张图片呢?

一张图片可以被表示成一个3D张量,即其形状为[height,width,channel], height 就表示高, width 表示宽, channel 表示通道数。我们会经常遇到3D和4D的表示

Tensor(指令名称,shape,dtype)

单个图片: shape = (height,width,channel)

多个图片: shape = (batch,height,width,channel),batch 表示一个批次的张量数量


二、图片特征值处理

iris 数据集

150个样本 4个特征 目标值

1)一个样本 327 * 499 * 3  数据量大

2)样本和样本的形状不统一,没办法进行批量操作和运算

为什么要缩放图片到统一大小?

在进行图像识别的时候,每个图片样本的特征数量要保持相同。所以需要将所有图片张量大小统一转换。

另一方面,如果图片的像素量太大,通过这种方式适当减少像素的数量,减少训练的计算开销。

tf.image.resize_images(images,size)

缩小放大图片

images :4-D形状[batch,height,width,channels]或3-D形状的张量[height,width,channels]的图片数据

size :1-D int32张量: new_height , new_width ,图像的新尺寸

返回4-D 格式或者3-D 格式图片


三、数据格式

存储:unit8(节约空间)

矩阵计算:float32(提高精度)


四、案例:狗图片读取

狗图片如下:

(1)读取流程分析

构造图片文件名队列

读取图片数据并进行解码

处理图片数据形状,使样本的形状和类型统一,放入批处理

开启会话线程运行

(2)完整代码

import tensorflow as tf

import os

def picture_read():

"""

狗图片读取案例

:return:

"""

# 1、构造文件名队列

file_queue = tf.train.string_input_producer(file_list)

# 2、读取与解码

# 读取阶段

reader = tf.WholeFileReader()

# key 文件名,value 一张图片的原始编码形状

key,value = reader.read(file_queue)

print("key:\n",key)

print("value:\n",value)

#解码阶段

image = tf.image.decode_jpeg(value)

print("image:\n",image)

# 图像的形状、类型修改

image_resized = tf.image.resize_images(image,[200,200])

print("image_resized:\n",image_resized)

# 静态形状修改

image_resized.set_shape(shape=[200,200,3])

print("image_resized:\n",image_resized)

# 3、批处理

image_batch=tf.train.batch([image_resized],batch_size=100,num_threads=1,capacity=100)

print("image_batch:\n",image_batch)

# 开启会话

with tf.Session() as sess:

# 开启线程

# 线程协调员

coord = tf.train.Coordinator()

threads=tf.train.start_queue_runners(sess=sess,coord==coord)

key_new,value_new,image_new,image_resized_new,image_batch_new = sess.run([key,value,image])

print("key_new:\n",key_new)

print("value_new:\n",value_new)

print("image_new:\n",image_new)

print("image_resized_new:\n",image_resized_new)

print("image_batch_new:\n",image_batch_new)

# 回收线程

coord.request_stop()

return None

if __name__ == "__main__":

# 构造路径+文件名的列表

filename = os.listdir("./dog")

# print(filename)

# 拼接路径+文件名

file_list = [os.path.join("./dog",file) for file in filename]

picture_read()

相关文章
|
8天前
|
前端开发
前端之图片操作
前端之图片操作
|
4月前
|
存储 Python
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
|
4月前
|
文字识别 安全 API
印刷文字识别产品使用合集之不想通过读取图片二进制文件的方式来传入图片内容,如何进行图片内容识别
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
5月前
|
计算机视觉
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
271 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-创建读取流2
前端学习笔记202305学习笔记第二十五天-创建读取流2
59 0
前端学习笔记202305学习笔记第二十五天-创建读取流2
|
存储 JavaScript 前端开发
Java实现图片的上传和显示
Java实现图片的上传和显示
448 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-创建读取流3
前端学习笔记202305学习笔记第二十五天-创建读取流3
37 0
|
存储 小程序
小程序图片上传,存储,获取,显示(含源码)
小程序图片上传,存储,获取,显示(含源码)
336 0
|
存储 算法
图片一共有多少种格式?区别分别是什么?底层原理是什么?
图片一共有多少种格式?区别分别是什么?底层原理是什么?
139 0
|
Python
【图片操作】批量转换黑白图片
关于今天的内容,我不知道有什么情况需要将图片批量转换称黑白图片。因此本文的主题是对图片的的简单操作。 在Python3中,有一个第三方的Pillow库可以用来操作图片,使用非常简单,下面完美来具体看看。
322 0