Pytorch读取,加载图像数据(一)

在学习Pytorch的时候,先学会如何正确创建或者加载数据,至关重要。

有了数据,很多函数,操作的效果就变得很直观。

本文主要用其他库读取图像文件(学会这个,你就可以在之后的学习中,将一些效果直观化)

更好的文章组织结构:

  • Github
  • 关注公众号:tuduisuinian(土堆碎念),菜单底部可以获取pytorch教程PDF文档

零:准备

加载数据前,需要掌握正确的读取路径方法。很多教程中的例子,在讲解的时候,没有提供图片,或者读者不知道修改教程中的读取路径,打击了热情。

**建议:为了保证大家可以跟着教程一步一步练习,教程中会出现示例图片,建议大家右键-另存为图片,将图片保存到 你运行程序的文件夹 中。**如下图:

壹:数据集的准备

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

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

接下来,我们就可以在load_images.py中,进行相关操作了。

贰:用其他库读取图像文件

  • 使用matplotlib库进行图像的读取

matplotlib中的函数跟Matlab很像。

我们需要使用matplotlib.pyplot中的函数:

imread(文件地址):进行读取图像的操作(参数为读取图像文件的路径)

imshow(数组):进行图像的显示操作(显示图像的数组)

show():显示一个窗口,用于显示图像(很多时候,不显示图像的话,是忘记使用这个函数)

我们尝试探讨,图像被读取后的数据类型,大小形状

import matplotlib.pyplot as pltimg = plt.imread('002.jpg')#图片的高H为460,宽W为346,颜色通道C为3print(img.shape)print(img.dtype)print(type(img))plt.imshow(img)plt.show()复制代码

输出为:

(460, 346, 3)uint8复制代码

结论:imread读取的图片为numpy.ndarry的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是uint8,即每个数据的大小为[0,255]

如果不想手动进行多图像的读取,需要使用到Python的文件,路径操作等。暂不介绍

手动添加的话,就是用[array1,array2]这种形式,将数组进行连接

import matplotlib.pyplot as pltimg1 = 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 cv2img1 = cv2.imread('002.jpg')print(img1.shape)print(img1.dtype)print(type(img1))cv2.imshow('img', img1)cv2.waitKey(0)复制代码

输出为:

(460, 346, 3)uint8复制代码

结论:imread读取的图片为numpy.ndarry的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是uint8`,即每个数据的大小为[0,255]

Matplotlib与cv2对图像的数据格式的处理是相似的,但是也是有区别的:

对于通道的读取,cv2是按BGR的顺序读入,而matplotlib按RGB的顺序读入


  • 使用PIL库进行图像处理

PIL全称为Python Image Library。是给Python提供图像处理相关的库。

需要使用到的函数:

open(文件地址):打开文件,注意是打开,并没有读取。主要作用是保持检查文件地址,同时保证文件是打开的状态。当对图像处理的时候,会自动加载。

show():使用系统自带的图像查看器,查看图像

from PIL import Imageimg1 = Image.open('002.jpg')# 因为PIL有自己的数据结构,所以没有shape,dtype属性# print(img1.shape)# print(img1.dtype)print(type(img1))img1.show()复制代码

输出为:

复制代码

我们可以使用numpy.array()函数,将PIL结构的数据转换成numpy数组。

import matplotlib.pyplot as pltfrom PIL import Imageimport numpy as npimg1 = 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函数

c++读取图片_Pytorch读取,加载图像数据(一)相关推荐

  1. [高光谱] Hyperspectral-Classification Pytorch 数据集的读取、划分、加载

    Hyperspectral-Classification Pytorch 数据集的读取.划分.加载 文章目录 Hyperspectral-Classification Pytorch 数据集的读取.划 ...

  2. python异步加载图片_如何在PyQt5中正确异步加载图像?

    我在尝试如何在pyqtqlistview中正确地完成异步映像加载.在 我的主小部件由一个Qlistview和一个QLineEdit文本框组成. 我有一个参与者数据库,我使用QAbstractListM ...

  3. 使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作

    使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作 总共分为四步 构造一个my_dataset类,继承自torch.utils.data.Dataset 重写__getite ...

  4. 图片的懒加载与预加载

    懒加载 懒加载:也叫延迟加载,指的是在长网页中延迟加载图片的时机,当用户需要访问时,再去加载,这样可以提高网站的首屏加载速度,提升用户的体验,并且可以减少服务器的压力. 懒加载的实现原理是:将页面上图 ...

  5. 图片的懒加载和预加载?

    一.写在前面 图片的懒加载和图片的预加载都是前端性能优化的一个方案,当然可能存在不同的应用场景,下面我们将总结一下这两个方案. 二.图片懒加载 图片的懒加载是什么? 图片的懒加载指的是在长网页中延迟加 ...

  6. 解密 | OpenCV加载图像大小是有限制的 ?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 问题来由 最近有人问一个问题,就是它有个大小800MB的图像文件, ...

  7. python opencv imread()函数 (从文件加载图像)

    def imread(filename, flags=None): # real signature unknown; restored from __doc__"""i ...

  8. 【机器视觉】 Halcon批量加载图像

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 加载图像文件方式一 04. 加载图像文件方式二 05. 下载 06. 附录 01. 概述 halcon是一款非常不错的视觉 ...

  9. 教你实现图片的惰性加载

    图片惰性加载 DEMO 地址 -> 图片惰性加载(放在了 Github 上,所以可能会慢,最好用 chrome) 关于惰性加载 在讲图片的惰性加载前,我们先来聊聊惰性加载.惰性加载又称为延迟加载 ...

最新文章

  1. Oracle学习之DATAGUARD(七) 使用Broker管理DG
  2. makefile使用.lds链接脚本以及 $@ ,$^, $, 解析
  3. git rm–r folder/file fatal:pathspec did not match any files
  4. css限制字体三行_讲道理,仅3行核心css代码的rate评分组件,我被自己秀到头皮发麻...
  5. 用户注意到用户计算机中千兆位网卡,为何你电脑上的千兆网卡跑不到千兆?
  6. 淘宝开发平台知识点一,入门指南
  7. 最良心的 chrome 插件可以良心到什么程度?
  8. oracle 锁表 and 解锁
  9. win10 安装 mysql-8.0.12
  10. [Ext JS 4] Extjs 图表 Legend(图例)的分行与分列显示
  11. Linux 命令(22)—— touch 命令
  12. nodejs linux复制文本,Nodejs 复制文件/文件夹的方法
  13. Apache Arrow 内存数据交换格式
  14. panda是删除行_如何从Pandas数据帧中删除行列表?
  15. 更新macOS Big Sur系统后,Parallels Desktop打不开怎么办?教你解决方法!
  16. 计算机测试题目及答案6,2017年计算机考试一级上机Word预测试题及答案6
  17. ERP系统功能之生产管理
  18. Ubuntu美化开关机界面 - Linux
  19. 天行健,君子以自强不息;地势坤,君子以厚德载物的权威解释
  20. VUE中动态改变字体大小

热门文章

  1. linux如何把postgresql添加到环境变量_如何搞清楚PostgreSQL的环境变量 ?
  2. 深入到系统组件是否白盒测试_白盒测试
  3. docker安装Tomcat
  4. python中的loop啥意思_python怎么进行loop
  5. elastic search java_elasticsearch学习四、JAVA调用
  6. js date转string_JS之你到底是什么类型?
  7. 【转】自然语言系列学习之表示学习与知识获取(四)TransE
  8. Elasticsearch kibana一些基本概念
  9. Python帮你识破双11的套路
  10. 美团算法专家:入门机器学习,比你想的要简单