使用Python读取图片

一、Python学习两大道具#

1. dir()工具#

  • 作用:支持打开package,看到里面的工具函数

  • 示例:

    (1) 输出torch库包含的函数

Copy
<span class="token builtin">dir</span><span class="token punctuation">(</span>torch<span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span></span>
<span class="token builtin">dir</span><span class="token punctuation">(</span>torch<span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span></span>
dir(torch)

(2) 输出torch.AVG函数中的参数

Copy
<span class="token builtin">dir</span><span class="token punctuation">(</span>torch<span class="token punctuation">.</span>AVG<span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span></span>
<span class="token builtin">dir</span><span class="token punctuation">(</span>torch<span class="token punctuation">.</span>AVG<span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span></span>
dir(torch.AVG)

2. help()工具#

  • 作用:说明书,查看库中函数某个参数的说明或使用方法

  • 示例:

    (1) 输出torch库中AVG函数的AVG参数使用方法

Copy
<span class="token builtin">help</span><span class="token punctuation">(</span>torch<span class="token punctuation">.</span>AVG<span class="token punctuation">.</span>AVG<span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span></span>
<span class="token builtin">help</span><span class="token punctuation">(</span>torch<span class="token punctuation">.</span>AVG<span class="token punctuation">.</span>AVG<span class="token punctuation">)</span> 
<span aria-hidden="true" class="line-numbers-rows"><span></span></span>
help(torch.AVG.AVG)

二、Pytorch读取图像数据#

0. 写在前面:#

(1)PIL库中Image函数的基本使用方法#

  • PIL的安装:win+r → cmd → 选择环境 → pip install Pillow

  • 使用方法:

Copy
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> Image
<span class="token comment">#选择图像路径</span>
<span class="token comment">#注意:在复制图像路径后,在windows环境下,需要将\变为\\</span>
img_path<span class="token operator">=</span><span class="token string">"E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg"</span>
<span class="token comment">#打开并标识给定的图像文件。</span>
<span class="token comment">#image.open()是一个懒惰的操作;此函数可识别文件,但文件保持打开状态,直到尝试处理数据(或调用load()方法),才会从文件中读取实际图像数据。</span>
img<span class="token operator">=</span>image<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span>img_path<span class="token punctuation">)</span>
<span class="token comment">#输出图像大小</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>img<span class="token punctuation">.</span>size<span class="token punctuation">)</span>
<span class="token comment">#打开图像(指的是直接根据该地址打开一个窗口显示这个图像)</span>
img<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> Image
  
<span class="token comment">#选择图像路径</span>
<span class="token comment">#注意:在复制图像路径后,在windows环境下,需要将\变为\\</span>
img_path<span class="token operator">=</span><span class="token string">"E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg"</span>
  
<span class="token comment">#打开并标识给定的图像文件。</span>
<span class="token comment">#image.open()是一个懒惰的操作;此函数可识别文件,但文件保持打开状态,直到尝试处理数据(或调用load()方法),才会从文件中读取实际图像数据。</span>
img<span class="token operator">=</span>image<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span>img_path<span class="token punctuation">)</span>
  
<span class="token comment">#输出图像大小</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>img<span class="token punctuation">.</span>size<span class="token punctuation">)</span>
  
<span class="token comment">#打开图像(指的是直接根据该地址打开一个窗口显示这个图像)</span>
img<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
from PIL import Image #选择图像路径 #注意:在复制图像路径后,在windows环境下,需要将\变为\\ img_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" #打开并标识给定的图像文件。 #image.open()是一个懒惰的操作;此函数可识别文件,但文件保持打开状态,直到尝试处理数据(或调用load()方法),才会从文件中读取实际图像数据。 img=image.open(img_path) #输出图像大小 print(img.size) #打开图像(指的是直接根据该地址打开一个窗口显示这个图像) img.show()

(2)os库中函数的基本使用方法#

  • os.path.join(path1, path2, … ,pathn):合并路径,在一定程度上可以避免因python语法问题,造成的\t或\n之类的错误。

    比如说,图片路径为:”hymenoptera_data\hymenoptera_data\train“,如果直接输入路径,那么会出现以下结果:

Copy
path<span class="token operator">=</span><span class="token string">"hymenoptera_data\hymenoptera_data\train"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span>
<span class="token triple-quoted-string string">'''
[Run]
hymenoptera_data\hymenoptera_data rain
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
path<span class="token operator">=</span><span class="token string">"hymenoptera_data\hymenoptera_data\train"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span>
  
<span class="token triple-quoted-string string">'''
[Run]
hymenoptera_data\hymenoptera_data    rain
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
path="hymenoptera_data\hymenoptera_data\train" print(path) ''' [Run] hymenoptera_data\hymenoptera_data rain '''

此时的处理方法有两种:

方法一:在\后面加个\

Copy
path<span class="token operator">=</span><span class="token string">"hymenoptera_data\\hymenoptera_data\\train"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span>
<span class="token triple-quoted-string string">'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
path<span class="token operator">=</span><span class="token string">"hymenoptera_data\\hymenoptera_data\\train"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span>

<span class="token triple-quoted-string string">'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
path="hymenoptera_data\\hymenoptera_data\\train" print(path) ''' [Run] hymenoptera_data\hymenoptera_data\train '''

方法二:os.path.join

Copy
<span class="token keyword">import</span> os
path1<span class="token operator">=</span><span class="token string">"hymenoptera_data\hymenoptera_data"</span>
path2<span class="token operator">=</span><span class="token string">"train"</span>
path<span class="token operator">=</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>path1<span class="token punctuation">,</span>path2<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span>
<span class="token triple-quoted-string string">'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
<span class="token keyword">import</span> os
path1<span class="token operator">=</span><span class="token string">"hymenoptera_data\hymenoptera_data"</span>
path2<span class="token operator">=</span><span class="token string">"train"</span>
path<span class="token operator">=</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>path1<span class="token punctuation">,</span>path2<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span>
  
<span class="token triple-quoted-string string">'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
import os path1="hymenoptera_data\hymenoptera_data" path2="train" path=os.path.join(path1,path2) print(path) ''' [Run] hymenoptera_data\hymenoptera_data\train '''
  • os.listdir(path):将path中包含的图片名称变为一个列表。

    比如说,路径为”hymenoptera_data\hymenoptera_data\train\ants“的文件夹中有0013035.jpg、5650366_e22b7e1065.jpg、6240329_72c01e663e.jpg三张图片,那么此时有:

Copy
<span class="token keyword">import</span> os
path<span class="token operator">=</span><span class="token string">"hymenoptera_data\\hymenoptera_data\\train\\ants"</span>
path_list<span class="token operator">=</span>os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>path<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path_list<span class="token punctuation">)</span>
<span class="token triple-quoted-string string">'''
[Run]
['0013035.jpg', '5650366_e22b7e1065.jpg', '6240329_72c01e663e.jpg']
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
<span class="token keyword">import</span> os
path<span class="token operator">=</span><span class="token string">"hymenoptera_data\\hymenoptera_data\\train\\ants"</span>
path_list<span class="token operator">=</span>os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>path<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>path_list<span class="token punctuation">)</span>
  
<span class="token triple-quoted-string string">'''
[Run]
['0013035.jpg', '5650366_e22b7e1065.jpg', '6240329_72c01e663e.jpg']
'''</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
import os path="hymenoptera_data\\hymenoptera_data\\train\\ants" path_list=os.listdir(path) print(path_list) ''' [Run] ['0013035.jpg', '5650366_e22b7e1065.jpg', '6240329_72c01e663e.jpg'] '''

1. Dataset#

  • 作用:提供一种方式去获取数据及其label

  • 功能:

    • 如何获取每一个数据及其label

    • 告诉我们总共有多少数据(作用:神经网络要对同一个数据迭代多次,只有当我们知道总共有多少个数据,训练的时候我们才知道要训练多少次,才能把这个数据集迭代完然后进行下一次的迭代)

  • 详解:

    • getitem:获取数据对应的label

    • len:返回数据的size

使用示例:

数据下载地址:百度网盘 请输入提取码 (baidu.com)

提取码:zsh8

(1)读取、简单处理图像数据

Copy
<span class="token keyword">from</span> torch<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>data <span class="token keyword">import</span> Dataset
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> Image
<span class="token keyword">import</span> os
<span class="token keyword">class</span> <span class="token class-name">MyData</span><span class="token punctuation">(</span>Dataset<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token comment">#参数说明:</span>
<span class="token comment">#root_dir:数据集的路径,如"E:\Desktop\hymenoptera_data\hymenoptera_data\train"(最好还是都加上\\,像其中的\train由于\t的存在会导致错误)</span>
<span class="token comment">#label_dir:数据的标签,如"ants"</span>
<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span>root_dir<span class="token punctuation">,</span>label_dir<span class="token punctuation">)</span><span class="token punctuation">:</span>
self<span class="token punctuation">.</span>root_dir<span class="token operator">=</span>root_dir
self<span class="token punctuation">.</span>label_dir<span class="token operator">=</span>label_dir
<span class="token comment"># 使用os.path.join的方法是为了避免\和\\错误的问题</span>
<span class="token comment"># self.path='E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants'</span>
self<span class="token punctuation">.</span>path<span class="token operator">=</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>self<span class="token punctuation">.</span>root_dir<span class="token punctuation">,</span>self<span class="token punctuation">.</span>label_dir<span class="token punctuation">)</span>
<span class="token comment">#将文件夹内所有图片的地址变成一个列表,并按先后顺序排列</span>
self<span class="token punctuation">.</span>img_path<span class="token operator">=</span>os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>self<span class="token punctuation">.</span>path<span class="token punctuation">)</span>
<span class="token comment">#输入:图像对应的索引</span>
<span class="token comment">#返回:idx索引对应的打开并标识过后的图像文件img;图像对应的标签label</span>
<span class="token keyword">def</span> <span class="token function">__getitem__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span>idx<span class="token punctuation">)</span><span class="token punctuation">:</span>
img_name<span class="token operator">=</span>self<span class="token punctuation">.</span>img_path<span class="token punctuation">[</span>idx<span class="token punctuation">]</span> <span class="token comment">#根据索引idx,读取列表self.img_path中的图像名称</span>
img_item_path<span class="token operator">=</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>self<span class="token punctuation">.</span>root_dir<span class="token punctuation">,</span>self<span class="token punctuation">.</span>label_dir<span class="token punctuation">,</span>img_name<span class="token punctuation">)</span> <span class="token comment">#读取该索引对应图像的存储路径</span>
img<span class="token operator">=</span>Image<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span>img_item_path<span class="token punctuation">)</span> <span class="token comment">#打开并标识给定的图像文件</span>
label<span class="token operator">=</span>self<span class="token punctuation">.</span>label_dir <span class="token comment">#label=数据标签,在该数据集中为ant或bee</span>
<span class="token keyword">return</span> img<span class="token punctuation">,</span>label
<span class="token comment">#返回图像数据集的长度,也就是说所读取的数据集中有多少张图片</span>
<span class="token keyword">def</span> <span class="token function">__len__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token builtin">len</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>img_path<span class="token punctuation">)</span>
root_dir<span class="token operator">=</span><span class="token string">"E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train"</span>
ants_label_dir<span class="token operator">=</span><span class="token string">"ants"</span>
bees_label_dir<span class="token operator">=</span><span class="token string">"bees"</span>
ants_dataset<span class="token operator">=</span>MyData<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>ants_label_dir<span class="token punctuation">)</span>
bees_dataset<span class="token operator">=</span>MyData<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>ants_label_dir<span class="token punctuation">)</span>
img<span class="token punctuation">,</span>label<span class="token operator">=</span>ants_dataset<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>img<span class="token punctuation">,</span>label<span class="token punctuation">)</span> <span class="token comment">#根据索引,获取标识过后的图像img,以及对应的标签</span>
img<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">#显示对应索引的图像</span>
train_dataset<span class="token operator">=</span>ants_dataset<span class="token operator">+</span>bees_dataset <span class="token comment">#将两个数据集进行拼接</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>ants_dataset<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token builtin">len</span><span class="token punctuation">(</span>bees_dataset<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token builtin">len</span><span class="token punctuation">(</span>train_dataset<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
<span class="token keyword">from</span> torch<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>data <span class="token keyword">import</span> Dataset
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> Image
<span class="token keyword">import</span> os

<span class="token keyword">class</span> <span class="token class-name">MyData</span><span class="token punctuation">(</span>Dataset<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token comment">#参数说明:</span>
    <span class="token comment">#root_dir:数据集的路径,如"E:\Desktop\hymenoptera_data\hymenoptera_data\train"(最好还是都加上\\,像其中的\train由于\t的存在会导致错误)</span>
    <span class="token comment">#label_dir:数据的标签,如"ants"</span>
    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span>root_dir<span class="token punctuation">,</span>label_dir<span class="token punctuation">)</span><span class="token punctuation">:</span>
        self<span class="token punctuation">.</span>root_dir<span class="token operator">=</span>root_dir
        self<span class="token punctuation">.</span>label_dir<span class="token operator">=</span>label_dir

        <span class="token comment"># 使用os.path.join的方法是为了避免\和\\错误的问题</span>
        <span class="token comment"># self.path='E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants'</span>
        self<span class="token punctuation">.</span>path<span class="token operator">=</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>self<span class="token punctuation">.</span>root_dir<span class="token punctuation">,</span>self<span class="token punctuation">.</span>label_dir<span class="token punctuation">)</span>

        <span class="token comment">#将文件夹内所有图片的地址变成一个列表,并按先后顺序排列</span>
        self<span class="token punctuation">.</span>img_path<span class="token operator">=</span>os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>self<span class="token punctuation">.</span>path<span class="token punctuation">)</span>

    <span class="token comment">#输入:图像对应的索引</span>
    <span class="token comment">#返回:idx索引对应的打开并标识过后的图像文件img;图像对应的标签label</span>
    <span class="token keyword">def</span> <span class="token function">__getitem__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span>idx<span class="token punctuation">)</span><span class="token punctuation">:</span>
        img_name<span class="token operator">=</span>self<span class="token punctuation">.</span>img_path<span class="token punctuation">[</span>idx<span class="token punctuation">]</span>    <span class="token comment">#根据索引idx,读取列表self.img_path中的图像名称</span>
        img_item_path<span class="token operator">=</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>self<span class="token punctuation">.</span>root_dir<span class="token punctuation">,</span>self<span class="token punctuation">.</span>label_dir<span class="token punctuation">,</span>img_name<span class="token punctuation">)</span>   <span class="token comment">#读取该索引对应图像的存储路径</span>
        img<span class="token operator">=</span>Image<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span>img_item_path<span class="token punctuation">)</span>  <span class="token comment">#打开并标识给定的图像文件</span>
        label<span class="token operator">=</span>self<span class="token punctuation">.</span>label_dir    <span class="token comment">#label=数据标签,在该数据集中为ant或bee</span>
        <span class="token keyword">return</span> img<span class="token punctuation">,</span>label

    <span class="token comment">#返回图像数据集的长度,也就是说所读取的数据集中有多少张图片</span>
    <span class="token keyword">def</span> <span class="token function">__len__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
        <span class="token keyword">return</span> <span class="token builtin">len</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>img_path<span class="token punctuation">)</span>

root_dir<span class="token operator">=</span><span class="token string">"E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train"</span>
ants_label_dir<span class="token operator">=</span><span class="token string">"ants"</span>
bees_label_dir<span class="token operator">=</span><span class="token string">"bees"</span>
ants_dataset<span class="token operator">=</span>MyData<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>ants_label_dir<span class="token punctuation">)</span>
bees_dataset<span class="token operator">=</span>MyData<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>ants_label_dir<span class="token punctuation">)</span>

img<span class="token punctuation">,</span>label<span class="token operator">=</span>ants_dataset<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>img<span class="token punctuation">,</span>label<span class="token punctuation">)</span>   <span class="token comment">#根据索引,获取标识过后的图像img,以及对应的标签</span>
img<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>         <span class="token comment">#显示对应索引的图像</span>

train_dataset<span class="token operator">=</span>ants_dataset<span class="token operator">+</span>bees_dataset    <span class="token comment">#将两个数据集进行拼接</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>ants_dataset<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token builtin">len</span><span class="token punctuation">(</span>bees_dataset<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token builtin">len</span><span class="token punctuation">(</span>train_dataset<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
from torch.utils.data import Dataset from PIL import Image import os class MyData(Dataset): #参数说明: #root_dir:数据集的路径,如"E:\Desktop\hymenoptera_data\hymenoptera_data\train"(最好还是都加上\\,像其中的\train由于\t的存在会导致错误) #label_dir:数据的标签,如"ants" def __init__(self,root_dir,label_dir): self.root_dir=root_dir self.label_dir=label_dir # 使用os.path.join的方法是为了避免\和\\错误的问题 # self.path='E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants' self.path=os.path.join(self.root_dir,self.label_dir) #将文件夹内所有图片的地址变成一个列表,并按先后顺序排列 self.img_path=os.listdir(self.path) #输入:图像对应的索引 #返回:idx索引对应的打开并标识过后的图像文件img;图像对应的标签label def __getitem__(self,idx): img_name=self.img_path[idx] #根据索引idx,读取列表self.img_path中的图像名称 img_item_path=os.path.join(self.root_dir,self.label_dir,img_name) #读取该索引对应图像的存储路径 img=Image.open(img_item_path) #打开并标识给定的图像文件 label=self.label_dir #label=数据标签,在该数据集中为ant或bee return img,label #返回图像数据集的长度,也就是说所读取的数据集中有多少张图片 def __len__(self): return len(self.img_path) root_dir="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train" ants_label_dir="ants" bees_label_dir="bees" ants_dataset=MyData(root_dir,ants_label_dir) bees_dataset=MyData(root_dir,ants_label_dir) img,label=ants_dataset[0] print(img,label) #根据索引,获取标识过后的图像img,以及对应的标签 img.show() #显示对应索引的图像 train_dataset=ants_dataset+bees_dataset #将两个数据集进行拼接 print(len(ants_dataset),len(bees_dataset),len(train_dataset))

(2)存储图像数据

首先新建一个文件夹,在该文件夹中:.txt文件名表示.jpg的图片名称,.txt文件中存储的数据为对应图像的label。用下面代码将文件名、label实现写入:

Copy
<span class="token keyword">import</span> os
root_dir<span class="token operator">=</span><span class="token string">"E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train"</span>
target_dir<span class="token operator">=</span><span class="token string">"ants"</span>
img_path<span class="token operator">=</span>os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>target_dir<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">#将target_dir文件夹中的图片名称存到img_path的列表中</span>
label<span class="token operator">=</span>target_dir <span class="token comment">#标签为target_dir(根据实际情况读取标签)</span>
out_dir<span class="token operator">=</span><span class="token string">"ants_label"</span> <span class="token comment">#输出图片的地址</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> img_path<span class="token punctuation">:</span> <span class="token comment">#遍历每一张图片的名字</span>
file_name<span class="token operator">=</span>i<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">".jpg"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token comment">#除去.jpg后缀,取出图片名字</span>
<span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>out_dir<span class="token punctuation">,</span><span class="token string">"{}.txt"</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>file_name<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token string">'w'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span> <span class="token comment">#以图片名命名.txt文件</span>
f<span class="token punctuation">.</span>write<span class="token punctuation">(</span>label<span class="token punctuation">)</span> <span class="token comment">#将相应图片的标签,写入.txt文件中</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
<span class="token keyword">import</span> os

root_dir<span class="token operator">=</span><span class="token string">"E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train"</span>
target_dir<span class="token operator">=</span><span class="token string">"ants"</span>
img_path<span class="token operator">=</span>os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>target_dir<span class="token punctuation">)</span><span class="token punctuation">)</span>  <span class="token comment">#将target_dir文件夹中的图片名称存到img_path的列表中</span>
label<span class="token operator">=</span>target_dir  <span class="token comment">#标签为target_dir(根据实际情况读取标签)</span>
out_dir<span class="token operator">=</span><span class="token string">"ants_label"</span>   <span class="token comment">#输出图片的地址</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> img_path<span class="token punctuation">:</span>  <span class="token comment">#遍历每一张图片的名字</span>
    file_name<span class="token operator">=</span>i<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">".jpg"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>   <span class="token comment">#除去.jpg后缀,取出图片名字</span>
    <span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>root_dir<span class="token punctuation">,</span>out_dir<span class="token punctuation">,</span><span class="token string">"{}.txt"</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>file_name<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token string">'w'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>   <span class="token comment">#以图片名命名.txt文件</span>
        f<span class="token punctuation">.</span>write<span class="token punctuation">(</span>label<span class="token punctuation">)</span>  <span class="token comment">#将相应图片的标签,写入.txt文件中</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
import os root_dir="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train" target_dir="ants" img_path=os.listdir(os.path.join(root_dir,target_dir)) #将target_dir文件夹中的图片名称存到img_path的列表中 label=target_dir #标签为target_dir(根据实际情况读取标签) out_dir="ants_label" #输出图片的地址 for i in img_path: #遍历每一张图片的名字 file_name=i.split(".jpg")[0] #除去.jpg后缀,取出图片名字 with open(os.path.join(root_dir,out_dir,"{}.txt".format(file_name)),'w') as f: #以图片名命名.txt文件 f.write(label) #将相应图片的标签,写入.txt文件中

2. Dataloder#

  • 作用:为后面的网络提供不同的数据形式(对其中几条数据进行打包)

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYkwHC3C' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片