使用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)
提取码:zsh8
(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 读取图片的尺寸、分辨率
#需要安装PIL模块 #encoding=gbk#--------------------------------------------------------------------------- ...
- Python读取图片尺寸、图片格式
Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...
- 利用Python读取图片exif敏感信息
众所周知,现在很多的照相机等软件,拍摄会有选项,是否包含位置信息等. 当然有的人会说,我在微信中查看图片exif信息并没有啊,这是因为你发送到微信服务器的时候,微信帮你完成了保密工作. 常见的图片中包 ...
- python读取图片相关属性
背景:工作中用到一些基础的图片处理的任务,比如获取图片宽高.获取图片的旋转角度等等图片属性,都是比较零散的,这里简单做个记录备忘 这里用到的库exifread,安装 pip isntall exifr ...
- Python读取图片,并保存为矩阵
from scipy.misc import imread,imshow img = imread('D:test.bmp') print img[:,:,2].shape imshow() 注意im ...
- Python中Opencv和PIL.Image读取图片的差异对比
近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的. image = np.array(Ima ...
- python 读取并显示图片的两种方法
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- Python读取excel中的图片
作为Java程序员,Java自然是最主要的编程语言.但是Java适合完成大型项目,对于平时工作中小的工作任务,需要快速完成,易于修改和调试,使用Java显得很繁琐,需要进行类的设计,打成jar包,出现 ...
- python 读取文件夹下的图片进行处理
python的os模块中有一个listdir函数可以遍历读取文件夹下的文件. import os for filename in os.listdir(r"./file"): #l ...
- python读取,显示,保存mnist图片
python处理二进制 python的struct模块可以将整型(或者其它类型)转化为byte数组.看下面的代码. # coding: utf-8 from struct import * # 包装成 ...
随机推荐
- Redis读书笔记(三)
单机数据库的实现 Redis数据库 Redis数据库的实现 struct redisServer { //... //保存服务器中的所有数据库, 数组 redisDB *db; //服务器的数据库数量 ...
- 【Vue项目】尚品汇(三)Home模块+Floor模块+Swiper轮播图
写在前面 今天是7.23,这一篇内容主要完成了Home模块和部分Search模块的开发,主要是使用了swiper轮播图插件获取vuex仓库数据展示组件以及其他信息. 1 Search模块 1.1 Se ...
- Vue中Key值的一些问题
1. Vue里面的key是一个特殊的变量,在元素当中是不体现出来的 2. 在解析成虚拟DOM的是,如果我们没有写key值,那么这个key就类似于下标 0 , 1 , 2 , 3.... 3. 使用列表 ...
- Mysql中的数据类型注意事项
整型数据类型 MySQL数据类型 含义(有符号) tinyint 1字节,范围(-128~127) smallint 2字节,范围(-32768~32767) mediumint 3字节,范围(-83 ...
- ROS动态调试PID参数
ROS动态调试PID参数 连接小车 注意:必须在同一区域网 ssh clbrobort@clbrobort 激活树莓派主板 roslaunch clbrobot bringup.launch 打开PI ...
- hasOwnProperty的作用、配合for in使用 、key in Object判读key
我们都知道,对象以 key|value的形式存在 它和数组一样可以遍历,对象可以通过for in 去遍历,拿到遍历对象的所有key 某些idea在使用for in 时,提示代码片段中就有出现以下这种情 ...
- 几种常见的Python数据结构
摘要:本文主要为大家讲解在Python开发中常见的几种数据结构. 本文分享自华为云社区<Python的常见数据结构>,作者: timerring . 数据结构和序列 元组 元组是一个固定长 ...
- 数据治理之关键环节元数据管理开源项目datahub探索
@ 目录 概述 定义 核心功能 概念 元数据应用 其他开源 架构 概览 组件 元数据摄取架构 服务体系结构 本地部署 环境要求 安装 摄取样例 摄取入门 介绍 核心概念 命令行MySQL摄取示例 配置 ...
- 2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。
2023-03-15:屏幕录制并且显示视频,不要用命令.代码用go语言编写. 答案2023-03-15: 使用moonfdd/ffmpeg-go和moonfdd/sdl2-go库来实现屏幕录制并显示视 ...
- 2020-10-01:谈谈golang的空结构体。
福哥答案2020-10-01:#福大大架构师每日一题# 1.map.value是空结构体,构造集合. 2.通道.只传递信号,不传递数据. 3.切片.不管切片多长,都不会占用空间. 4.仅包含方法的结构 ...