图片读取案例|学习笔记

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

开发者学堂课程【深度学习框架 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()

相关文章
|
2月前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
92 2
前端JS读取文件内容并展示到页面上
|
5月前
|
存储 Python
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
|
2月前
|
前端开发
前端之图片操作
前端之图片操作
|
3月前
打印表格图片发黑,如何处理
打印表格图片发黑,如何处理
52 1
|
5月前
|
文字识别 安全 API
印刷文字识别产品使用合集之不想通过读取图片二进制文件的方式来传入图片内容,如何进行图片内容识别
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
6月前
|
JSON Java 数据处理
Unity 数据读取|(二)多种方式读取文本文件
Unity 数据读取|(二)多种方式读取文本文件
|
6月前
|
编解码 API 计算机视觉
opencv从视频文件读取视频内容,从摄像头读取保存视频内容
opencv从视频文件读取视频内容,从摄像头读取保存视频内容
|
6月前
|
存储 安全 API
Unity 数据读取|(六)PlayerPrefs解析
Unity 数据读取|(六)PlayerPrefs解析
|
6月前
|
计算机视觉
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
348 0
|
计算机视觉 Python
OpenCV学习笔记(一)【图片读入、显示、保存】
OpenCV学习笔记(一)【图片读入、显示、保存】
OpenCV学习笔记(一)【图片读入、显示、保存】