使用python查看图片数据
使用python查看图像数据
在学习图像分割前,发现对如何查看图像数据完全不熟悉,在查看了Fast.ai框架的源码后,本文记录了在图像数据为Tensor类型的情况下,显示图像数据的过程。
参考资料:fast.ai源码
1. 查看文件路径
本篇使用了CAMVID数据集,下载后文件目录结构如下所示:
以images为例,打开该文件夹后,有701张图片
有了图片路径,可以将所有图片的绝对路径存为一个list,如下所示:
def getImageFiles(path:str):"递归地查找图片文件"result = []for rootDir, Dir, files in os.walk(path):for file in files:if '.png' in file or '.jpg' in file:result.append(Path(path)/file)breakreturn result
img_path = 'C:/Users/ASUS/.fastai/data/camvid/images' #文件上级目录
imageFilesPath = getImageFiles(img_path)
此处rootDir代表文件夹路径,Dir代表下一级文件夹路径(如果在rootDir里之前创建过某个文件夹A,此处会保存A的路径字符串),这两个变量目前没啥用,files保存了rootDir下的所有文件的路径列表。
第二个loop用来做一个简单粗暴的过滤,过滤掉不是.PNG
,.JPG
格式的文件,并把.PNG
,.JPG
文件路径全部放入一个result列表里并return。
可以输出imageFilesPath[0]查看结果,如下所示:
WindowsPath('C:/Users/ASUS/.fastai/data/camvid/images/0001TP_006690.png')
标签图片文件在labels文件夹中,发现图片名有规律可循,如labels 中图片名字比images文件名字多一个‘_P’, 所以可以继续用上面的方式得到labels文件路径,也可以通过fast.ai教程里lambda来将图片文件名转换为标签图片名。
getLblPath = lambda x : path_lbl/f'{x:stem}'_P'{x.suffix}'
#测试用例
lbl_name = getLblPath(imageFilesPath[0])
imageFilesPath[0], lbl_name
运行结果为:
WindowsPath('C:/Users/ASUS/.fastai/data/camvid/images/0001TP_006690.png'),
(WindowsPath('C:/Users/ASUS/.fastai/data/camvid/labels/0001TP_006690_P.png'))
2. 显示图片
2.1 读取图片
数据集,标签路径已知后,就可以显示图片了,这里参考fastai源码,在显示图片的同时,return torch的tensor类型数据,将第3维度转为第1维度,如下所示:
def openImage(path:Path, figsize:tuple = (3, 3)):img = PIL.Image.open(path).convert('RGB')img = Tensor(np.array(img))img = pil2tensor(img, np.float32)img = img/255return img
这里使用PIL库来加载一个图片数据,并转为Tensor数据,最后返回这个数据。
2.2 读取标签图片
首先读取标签图片,但标签图片是2维的,为了和数据图片匹配,要扩展一个维度,并将第三个维度转到第一个维度上,再返回成Tensor,如下所示
def openMask(path:Path):img = PIL.Image.open(path).convert('L')#灰度图像模式img = pil2tensor(img, np.float32)return img
def pil2tensor(image:np.ndarray,dtype:np.dtype):"Convert PIL style `image` array to torch style image tensor."a = np.asarray(image)print(a.shape)if a.ndim==2 : a = np.expand_dims(a,2)a = np.transpose(a, (1, 0, 2))a = np.transpose(a, (2, 1, 0))return torch.from_numpy(a.astype(dtype, copy=False) )
#测试用例
mask = openMask(get_y_fn(imageFilesPath[10]))
image = openImage(imageFilesPath[10])#openImage会返回浮点 torch.Size([720, 960, 3])
mask.shape, image.shape
运行结果如下所示:
torch.Size([1, 720, 960])
torch.Size([3, 720, 960])
2.3 显示图片
如果是普通的三通道图片(RGB等)可以用imshow方法输入numpy数据来显示图片,将一维度和三维度转换(如[3, 720, 960]->[720, 960, 3]),但是标签数据只有一个通道,所以额外转换成二维的numpy输入([1, 720, 960]->[720, 960, 1]->[720, 960]),再显示图片。代码如下所示(参考fast.ai 源码):
def ifnone(a:Any,b:Any)->Any:return b if a is None else a
def image2np(image:Tensor)->np.ndarray:"Convert from torch style `image` to numpy/matplotlib style."res = image.cpu().permute(1,2,0).numpy()#此处作用是调换原有维度位置return res[...,0] if res.shape[2]==1 else res #抽取最后一个维度的第0个数据def show(img:Tensor, figsize:tuple=(3, 3), title:Optional[str]=None, hide_axis:bool=True,cmap:str=None, alpha:float=None):cmap = ifnone(cmap, 'viridis')fig, ax = plt.subplots(figsize=figsize)xtr = dict(cmap=cmap, alpha=alpha)ax.imshow(image2np(img.data), **xtr)if hide_axis: ax.axis('off')return axif title is not None: ax.set_title(title)
将mask 和 image 都作为show方法的输入,可以显示如下结果:
以上就是显示图片的方法。
使用python查看图片数据相关推荐
- python导入图片数据_Python中读取图片的6种方式
Python进行图片处理,第一步就是读取图片,这里给大家整理了6种图片的读取方式,并将读取的图片装换成numpy.ndarray()格式.首先需要准备一张照片,假如你有女朋友的话,可以用女朋友的,没有 ...
- 用python查看音频数据量#用python对音频图片截取保留拼接#根据乐谱生成音乐
声音是如何转化为数据的? 设备录制声音声音后,根据声音的振幅呈现出振幅图.横轴为时间线,纵轴为振幅. 对声音时间线采样 声音转化为数据的过程,就是将连续的时间每一个固定的时间间隔取一个幅度值,把时间离 ...
- python查看图片的gps_浅析python中获取图片中exif中的gps方法
现在很多手机都支援在照片中的exif中存储位置gps信息了,不过有时假如我们想在在线地图中定位照片中却犯了难,windows或acdsee显示的都是度分秒的方式,不能复制也不适宜得到到在线地图中定位, ...
- python查看图片的源代码_python获取图片元数据的代码
exif-py是一个纯python实现的获取图片元数据的python库,官方下载地址: http://exif-py.svn.sourceforge.net/viewvc/exif-py/source ...
- python查看图片的源代码_python实现图片筛选程序
今天因工作需要写了个小程序,用于在图片集中自动抽取需要的照片.该程序只是实现了基本功能,还有很多需要完善的地方,展示出来算是给自己鼓鼓气吧. 该程序应用有一定特殊条件,因我选择的图片集是工业生产过程中 ...
- python查看图片颜色统计_Python通过PIL获取图片主要颜色并和颜色库进行对比的方法...
本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指 ...
- python 读取图片数据
在当前很多应用中,都需要涉及图片处理.例如常见的手写体识别.车牌号码识别.人脸/动物识别等.由于我们通常得到的都是图片,这就需要我们将图片转换成数据.下面我分别针对灰度图图片转换处理. 这里使用的是手 ...
- python查看图片的源代码,python网络爬虫源代码(可直接抓取图片)
1.根据给定的网址获取网页源代码 2.利用正则表达式把源代码中的图片地址过滤出来 3.根据过滤出来的图片地址下载网络图片 import re import urllib.request def get ...
- python 安装PIL模块,并且查看图片大小
文章目录 1.安装PIL(pip install Pillow) 2.使用python查看图片大小 2.1 爬取图片的响应字节,查看图片大小(个人项目需求) 2.2 使用os模块查看本地文件的大小(包 ...
最新文章
- 新兴经济体助力BCH长足发展
- Flutter开发之ListView组件(21)
- 开源Python做的火币和ZB搬砖差价监控程序
- jQuery知识点笔记-常用方法
- 学习 Swift 的知识点整理
- 设计模式之观察者模式--中英文结合理解版
- 一文读懂目前大热的AutoML与NAS!
- 一步一步学习ObjectDataSource--(3)
- 性能测试工具Loadrunner使用之一(Virtual User Generato)
- C语言函数未声明错误,switch 调用函数 错误未定义???
- Datalogic得利捷全新自动调焦产品 开启扩展扫码新体验
- Python 定时任务的几种实现方式
- 读《电商产品经理宝典》——重点摘录总结
- Kotlin - 改良工厂模式
- java 解析 键值_JAVA:解析单个字符串键值对
- Docker学习之数据卷操作:Day4
- pc 和手机调用摄像头拍照 获取照片 好用
- 计算机版学猫叫歌,抖音学猫叫是什么歌
- 电信天翼云搭建Halo博客
- WEB基本表单及代码(HTML)