热门标签 | 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。


推荐阅读
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 在《Python编程基础》课程中,我们将深入探讨Python中的循环结构。通过详细解析for循环和while循环的语法与应用场景,帮助初学者掌握循环控制语句的核心概念和实际应用技巧。此外,还将介绍如何利用循环结构解决复杂问题,提高编程效率和代码可读性。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 针对图像分类任务的训练方案进行了优化设计。通过引入PyTorch等深度学习框架,利用其丰富的工具包和模块,如 `torch.nn` 和 `torch.nn.functional`,提升了模型的训练效率和分类准确性。优化方案包括数据预处理、模型架构选择和损失函数的设计等方面,旨在提高图像分类任务的整体性能。 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
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社区 版权所有