Python读取图片的方法详解

 更新时间:2023年08月11日 14:46:53   作者:码头牛牛  
这篇文章主要为大家详细介绍了Python中读取图片的实现方法,文中的示例代码简洁易懂,具有一定的参考价值,需要的小伙伴可以跟随小编一起学习一下

一、Python学习两大道具

1. dir()工具

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

示例:

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

dir(torch)

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

dir(torch.AVG)

2. help()工具

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

示例:

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

help(torch.AVG.AVG) 

二、Pytorch读取图像数据

0. 写在前面

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

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

使用方法:

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“,如果直接输入路径,那么会出现以下结果:

path="hymenoptera_data\hymenoptera_data\train"
print(path)
'''
[Run]
hymenoptera_data\hymenoptera_data    rain
'''

此时的处理方法有两种:

方法一:在\后面加个\

path="hymenoptera_data\\hymenoptera_data\\train"
print(path)
'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''

方法二:os.path.join

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三张图片,那么此时有:

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)

提取码:2hby

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

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实现写入:

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

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

到此这篇关于Python读取图片的方法详解的文章就介绍到这了,更多相关Python读取图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python过滤中英文标点符号的实例代码

    python过滤中英文标点符号的实例代码

    今天小编就为大家分享一篇python过滤中英文标点符号的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python 实现将小图片放到另一个较大的白色或黑色背景图片中

    python 实现将小图片放到另一个较大的白色或黑色背景图片中

    今天小编就为大家分享一篇python 实现将小图片放到另一个较大的白色或黑色背景图片中,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python实时监控logstash日志代码

    python实时监控logstash日志代码

    这篇文章主要介绍了python实时监控logstash日志代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 用python编写一个图片拼接工具

    用python编写一个图片拼接工具

    大家好,本篇文章主要讲的是用python编写一个图片拼接工具,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python入门教程(二十一)Python的数组

    Python入门教程(二十一)Python的数组

    这篇文章主要介绍了Python入门教程(二十一)Python的数组,数组是一种特殊变量,数组可以在单个名称下保存多个值,我们可以通过引用索引号来访问这些值,需要的朋友可以参考下
    2023-04-04
  • Python+OpenCV绘制多instance的Mask图像

    Python+OpenCV绘制多instance的Mask图像

    Mask图像中,不同值表示不同的实例(instance)。本文将详细为大家讲讲如何利用OpenCV绘制多instance的Mask图像,感兴趣的可以学习一下
    2022-06-06
  • Python 面向对象编程的三大特性之继承

    Python 面向对象编程的三大特性之继承

    继承也是面向对象编程三大特性之一,本篇文章我们就来学习Python中继承的用处、使用场景及用与不用的区别,感兴趣的朋友一起来阅读下面文章吧
    2021-09-09
  • Python 常用 PEP8 编码规范详解

    Python 常用 PEP8 编码规范详解

    这篇文章主要介绍了Python 常用 PEP8 编码规范详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • 用python进行线性/非线性拟合的三种方法

    用python进行线性/非线性拟合的三种方法

    这篇文章主要给大家介绍了关于用python进行线性/非线性拟合的三种方法,数据分析中经常会使用到数据拟合,文中通过实例代码以及图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Pycharm中如何关掉python console

    Pycharm中如何关掉python console

    这篇文章主要介绍了Pycharm中如何关掉python console,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论