热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PythonPIL、cv2、Dataloader、plt读取/显示图像数据集对比实例

获得数据集是深度学习代码的首要步骤。下面我们使用相同的场景对PIL、cv2、Dataloader进行比较。假设图像处于single_imagesimages目录下,尺

获得数据集是深度学习代码的首要步骤。下面我们使用相同的场景对PIL、cv2、Dataloader进行比较。
假设图像处于/single_images/images/目录下,尺寸64x64x3。

import numpy as np
import os
import matplotlib.pyplot as plt

1.PIL

from PIL import Imageimages = os.listdir('./single_images/images/')
length = len(images)
for i in range(length):img = Image.open('./single_images/images/' + images[i]) #Image(64,64)RGBimg0 = np.asarray(img,dtype='float32') #numpy (64,64,3)

使用PIL得到的img0尺寸是(64x64x3),通道为RGB,取值范围0-255。

print(np.max(img0)) ##255.0
print(np.min(img0)) ##0.0
print(img0.shape) ##(64,64,3)

2.DataLoader

import torchvision.transforms as transforms
from torch.utils.data import DataLoader
from torchvision.datasets import ImageFoldertransform = transforms.ToTensor()
dataset = ImageFolder('single_images',transform=transform)
dataloader = DataLoader(dataset, batch_size=4, shuffle=False, num_workers=0, drop_last=True)
for i,data in enumerate(dataloader): print(i)real, _ = data for j in range(real.size()[0]):img_ = real[j,:,:,:] img1 = np.array(img_) #(3,64,64)

使用DataLoader得到的img1尺寸是(3x64x64),通道为RGB,适用于pytorch卷积的尺寸。取值范围是0-1。

print(img_.min()) #0.0
print(img_.max()) #1.0
print(img_.size()) #torch.Size([3,64, 64])

3.cv2

import cv2
images = os.listdir('./single_images/images/')
length = len(images)for i in range(length):img = cv2.imread('./single_images/images/' + images[i]) #uint8(64,64,3)
# pil_img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))img2 = np.asarray(img,dtype='float32') #numpy (64,64,3)BGRimg2 = img2[...,::-1] #(64,64,3)RGBimg2 = np.asarray(img2,dtype='float32')

使用cv2得到的img2尺寸是(64x64x3),通道为BGR,取值范围0-255。

print(np.max(img2)) ##255.0
print(np.min(img2)) ##0.0
print(img2.shape) ##(64,64,3)

PIL/DataLoader/cv2三者关系

1.PIL和DataLoader:
将img0和img1进行对比:

img0 = np.transpose(img0,(2,0,1)) #numpy (3,64,64)
img00 = img0/255
sum(sum(sum(img00-img1)))#0

可以看出,**PIL的图像转为(3x64x64)之后再除以255归一化,就和DataLoader的像素是一样的。**所以,如果要训练图片,首选是DataLoader,输出类型就是归一化的tensor,而PIL改变尺寸再归一化变成tensor之后也是一样的。

2.PIL和cv2:
都是(64x64x3),但是RGB的顺序不同,对cv2的结果进行转换:

img2 = img2[...,::-1] #(64,64,3)RGB
sum(sum(sum(img2-img0))) ##280.0

发现PIL和cv2结果的像素值存在部分差异。



4.plt

最后说显示的plt
输入的尺寸应该是(3x64x64)的。所以对于cv2和PIL都是不需要转换尺寸的。但是cv2需要转换通道顺序为RGB。


推荐阅读
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了10分钟了解Android的事件分发相关的知识,希望对你有一定的参考价值。什么是事件分发?大家 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 动态多点××× 单云双HUB
    动态多点是一个高扩展的IPSEC解决方案传统的ipsecS2S有如下劣势1.中心站点配置量大,无论是采用经典ipsec***还是采用greoveripsec多一个分支 ... [详细]
author-avatar
碳酸钙baby_849
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有