Pytorch读取,加载图像数据(一)
在学习Pytorch的时候,先学会如何正确创建或者加载数据,至关重要。
有了数据,很多函数,操作的效果就变得很直观。
本文主要用其他库读取图像文件(学会这个,你就可以在之后的学习中,将一些效果直观化)
更好的文章组织结构:
零:准备
加载数据前,需要掌握正确的读取路径方法。很多教程中的例子,在讲解的时候,没有提供图片,或者读者不知道修改教程中的读取路径,打击了热情。
建议:为了保证大家可以跟着教程一步一步练习,教程中会出现示例图片,建议大家右键-另存为图片,将图片保存到 你运行程序的文件夹 中。如下图:

壹:数据集的准备
任务:我们用不同的方式读取这两张图片(记得右键-另存为图片,保存到程序所在位置,记得文件重命名为你喜欢的方式,我的重命名为002.jpg和003.jpg


将文件另存为后,同时新建一个python文件,我的效果如下:

接下来,我们就可以在load_images.py中,进行相关操作了。
贰:用其他库读取图像文件
- 使用
matplotlib库进行图像的读取
matplotlib中的函数跟Matlab很像。
我们需要使用matplotlib.pyplot中的函数:
imread(文件地址):进行读取图像的操作(参数为读取图像文件的路径)
imshow(数组):进行图像的显示操作(显示图像的数组)
show():显示一个窗口,用于显示图像(很多时候,不显示图像的话,是忘记使用这个函数)
我们尝试探讨,图像被读取后的数据类型,大小形状
import matplotlib.pyplot as plt
img = plt.imread('002.jpg')
#图片的高H为460,宽W为346,颜色通道C为3
print(img.shape)
print(img.dtype)
print(type(img))
plt.imshow(img)
plt.show()
输出为:
(460, 346, 3)
uint8
<class 'numpy.ndarray'>
结论:imread读取的图片为numpy.ndarry的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是uint8,即每个数据的大小为[0,255]
如果不想手动进行多图像的读取,需要使用到Python的文件,路径操作等。暂不介绍
手动添加的话,就是用[array1,array2]这种形式,将数组进行连接
import matplotlib.pyplot as plt
img1 = plt.imread('002.jpg')
img2 = plt.imread('003.jpg')
img = [img1, img2]
for i in img:
plt.imshow(i)
plt.show()
- 使用
cv2进行图像的读取
在cv2库中,需要用到的函数有:
imread(文件地址):读取地址处的文件图像
imshow('窗口名称', 图像数组):将图像数组显示出来,但必须结合waitKey()使用,否则无法显示图像
waitKey(延迟时间):需要设置延迟时间,当延迟时间≤0时,窗口将会一直延迟,延迟无穷长时间,按下任一按键,可以继续执行下面程序。当延迟时间>0,即窗口图像会显示对应毫秒后,自动消失。
import cv2
img1 = cv2.imread('002.jpg')
print(img1.shape)
print(img1.dtype)
print(type(img1))
cv2.imshow('img', img1)
cv2.waitKey(0)
输出为:
(460, 346, 3)
uint8
<class 'numpy.ndarray'>
结论:imread读取的图片为numpy.ndarry的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是uint8`,即每个数据的大小为[0,255]
Matplotlib与cv2对图像的数据格式的处理是相似的,但是也是有区别的:
对于通道的读取,cv2是按BGR的顺序读入,而matplotlib按RGB的顺序读入
- 使用
PIL库进行图像处理
PIL全称为Python Image Library。是给Python提供图像处理相关的库。
需要使用到的函数:
open(文件地址):打开文件,注意是打开,并没有读取。主要作用是保持检查文件地址,同时保证文件是打开的状态。当对图像处理的时候,会自动加载。
show():使用系统自带的图像查看器,查看图像
from PIL import Image
img1 = Image.open('002.jpg')
# 因为PIL有自己的数据结构,所以没有shape,dtype属性
# print(img1.shape)
# print(img1.dtype)
print(type(img1))
img1.show()
输出为:
<class 'PIL.JpegImagePlugin.JpegImageFile'>
我们可以使用numpy.array()函数,将PIL结构的数据转换成numpy数组。
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
img1 = Image.open('002.jpg')
img1 = np.array(img1)
print(img1.shape)
print(img1.dtype)
plt.imshow(img1)
plt.show()
输出:
(460, 346, 3)
uint8
可以看到,PIL转换成numpy后,数据类型是uint8的。
叁:总结
主要介绍了使用matplotlib,cv2,PIL库进行图像文件的读取
matplotlib中的imread,imshow,show函数cv2中的imread,imshow,waitKey函数PIL中的open,show函数
Pytorch读取,加载图像数据(一)的更多相关文章
- 使用js加载图像和setDataXML()加载数据
使用js加载图像和setDataXML()加载数据 前面一篇对FusionCharts进行了一个简单的介绍,而且建立了我们第一个图形,但是那个是在HTML中使用<OBJECT>和<E ...
- Android 多种方式正确的加载图像,有效避免oom
图像加载的方式: Android开发中消耗内存较多一般都是在图像上面,本文就主要介绍怎样正确的展现图像减少对内存的开销,有效的避免oom现象.首先我们知道我的获取图像的来源一般有三种源头:1.从网络加 ...
- geotrellis使用(二十三)动态加载时间序列数据
目录 前言 实现方法 总结 一.前言 今天要介绍的绝对是华丽的干货.比如我们从互联网上下载到了一系列(每天或者月平均等)的MODIS数据,我们怎么能够对比同一区域不同时间的数据情况,采用 ...
- 基于zepto的H5/移动端tab切换触摸拖动加载更多数据
以前实现移动端的滑动加载更多实现的方法是当滚动条快到页面底部时就自动加载更多的数据,在这方面很多人都用的是"西门的后花园"写的一个叫dropload的插件,这个插件用起来也很好,很 ...
- iOS --- UIWebView的加载本地数据的三种方式
UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIM ...
- ios网络学习------4 UIWebView的加载本地数据的三种方式
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
- Android异步加载图像(含线程池,缓存方法)
研究了android从网络上异步加载图像: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new 一个Han ...
- [翻译][MVC 5 + EF 6] 7:加载相关数据
原文:Reading Related Data with the Entity Framework in an ASP.NET MVC Application 1.延迟(Lazy)加载.预先(Eage ...
- 转: Android异步加载图像小结
转:http://blog.csdn.net/sgl870927/article/details/6285535 研究了android从网络上异步加载图像,现总结如下: (1)由于android UI ...
随机推荐
- Netty源码分析-- ThreadLocal分析(九)
为了更好地探讨Netty的内存模型,后面会用到,这里我还是决定跟大家一起看下ThreadLocal和FastThreadLocal的源码,有的时候我们在看源码的时候会一层层的遇到很多之前没有看过的内容 ...
- 分布式ID系列之为什么需要分布式ID以及生成分布式ID的业务需求
为什么需要分布式id生成系统 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID ...
- 【Java例题】4.5异常处理
5. 对于输入的数,如果出现小数,则作为异常处理,并舍去小数,显示结果:如果输入的数据类型不对也作为异常处理,显示结果0. package chapter4; import java.util.*; ...
- Java一个简单的文件工具集
class FileUtils { //文件目录下文件总数目 public static int fileNumber(File dir) { int filenumber = 0; if(dir.e ...
- hadoop2.7+spark2.2+zookeeper3.4.简单安装
1.zookeeper的安装##配置/etc/hosts192.168.88.130 lgh192.168.88.131 lgh1192.168.88.132 lgh2 ##安装java8 解压配置环 ...
- ES6中比较实用的几个特性
1.Default Parameters(默认参数) in ES6 es6之前,定义默认参数的方法是在一个方法内部定义 var link = function (height, color, url) ...
- 【KakaJSON手册】06_Model转JSON
前面的文章介绍了如何利用KakaJSON进行JSON转Model,从这篇文章开始介绍如何将Model转成JSON 生成JSON和JSONString struct Car: Convertible { ...
- 解决OneNote同步出错
问题: onenote同步出现黄色叹号. 解决: 分析: 对每个分区进行设置密码,不能设置的证明该分区有问题.(可能不只一个分区卡同步) 解决方法: 1,将有问题的分区分制一份,然后删掉原来的分区 2 ...
- Go-json解码到结构体
废话不多说,直接干就得了,上代码 package main import ( "encoding/json" "fmt" ) type IT struct { ...
- TDH 安装 TDH-Client
1. TDH-Client 下载 (下载分享:链接:https://pan.baidu.com/s/1ZmP4BUCiuRypCtsoAuvKRA 提取码:xsbl ) tar -vxf td ...