torchvision中的resize对PIL.Image对象的处理速度要优于opencv近7千倍

图片数据集中的图片之间的大小存在差异;希望进行预resize处理,但是纠结于以下三者的处理效率差异:

  • 使用opencv中的resize;
  • torchvison中的resize;
  • tf.image.resize。

因此做了以下的实验,最终发现torchvision+PIL的方式似乎更胜一筹

from torchvision import transforms
import tensorflow as tf
import cv2
import time

imgpath = "/home/night/PycharmProjects/wangyan/wyhaha/train_dataset/original/Gramian Angular Field/Beef/test_data_0.png"

start = time.time()
img = cv2.imread(imgpath)
resized = cv2.resize(img, (512, 512))
print("time:{:.4}".format((time.time() - start) * 1000))

img = Image.open(imgpath).convert('RGB')
img = transforms.Resize([512, 512])(img)  # 输入必须要求时Image
start = time.time()
print("time:{:.4}".format((time.time() - start) * 1000))

img = Image.open(imgpath).convert('RGB')
img = tf.image.resize(img, [512, 512])
start = time.time()
print("time:{:.4}".format((time.time() - start) * 1000))

# ============================================
time:7.104
time:0.0009537
time:0.002623

容易看出,torchvision的方式要快opencv近7000倍;

(之所以没有等到在__getitem___中进行transform,是因为希望将这些图片统一shape以转化为张量数据;但是确实,实际应用场景中,不适合在读取之后就进行一次resize,是不合理且会失去很多图像信息的。)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: PIL(Python Imaging Library)是一个用于处理图像的Python库。在PILImage模块提供了一个Image类,用于表示和操作图像。Image类表示图像的二维像素数组。 Image模块的open()函数可以打开一个图像文件,并返回一个Image对象Image对象有许多方法,可以用于对图像进行各种操作,例如缩放、旋转、裁剪、转换格式等等。 在PIL,一个图像通常表示为一个PIL.Image.Image类型的对象。这个对象包含了图像的各种信息,例如图像大小、色彩模式、像素数组等等。你可以使用PIL的各种方法和函数来操作这个对象,并对图像进行各种处理。 ### 回答2: PIL.Image.Image类型是Python Imaging Library(PIL表示图像的主要数据类型。它是一个抽象类,被用作各种图像处理操作的基础。 PIL.Image.Image类型是通过打开图像文件或者创建空白图像来创建的。它可以是不同格式的图像,比如JPEG、PNG、BMP等。使用PIL的open函数可以直接打开图像文件,得到的对象就是PIL.Image.Image类型。我们也可以使用PIL库提供的Image.new()方法来创建具有指定大小和模式(如RGB、L、RGBA等)的空白图像。 PIL.Image.Image类型具有一系列方法用于对图像进行处理。例如,可以使用resize()方法调整图像的大小,使用crop()方法裁剪图像的指定部分,使用rotate()方法旋转图像等。此外,还可以使用getpixel()和putpixel()方法来获取和修改图像的像素值。 PIL.Image.Image类型还支持图像的保存和显示。可以使用save()方法将图像保存到文件,也可以使用show()方法直接显示图像在屏幕上。 需要注意的是,PIL.Image.Image类型是不可变的,即不能直接修改图像的像素值,因此大多数图像处理操作都是通过创建新的图像对象来实现的。 综上所述,PIL.Image.Image类型是Python Imaging Library用于表示图像的主要数据类型,它提供了各种方法用于图像处理和操作,以及保存和显示图像。 ### 回答3: PIL.Image.Image是Python Imaging Library(PIL)图像类的基类,它是所有图像类型的超类。它提供了一些通用的方法和属性,可以应用于所有继承自它的具体图像类。 PIL.Image.Image对象可以表示各种类型的图像,例如位图、灰度图、彩色图等。它具有访问和修改像素值的能力,可以对图像进行缩放、旋转、裁剪和调整大小等操作。此外,它还可以保存图像到文件或打开文件的图像。 PIL.Image.Image对象具有一些常用的方法,比如crop()用于裁剪图像,resize()用于调整图像大小,rotate()用于旋转图像等。它还可以通过getpixel()和putpixel()方法来获取和设置像素值。除此之外,该对象还提供了一些用于获取图像信息的属性,如size表示图像的尺寸,mode表示图像的模式(如"RGB"、"L"等)。 要使用PIL.Image.Image对象,首先需要导入PIL库并创建一个图像对象。可以通过open()函数打开图像文件,也可以通过new()函数创建一个空的图像对象。然后,就可以对图像对象进行各种操作,如修改像素值、调整尺寸、保存图像等。 总之,PIL.Image.ImagePIL用于表示图像的基类,它提供了一系列的方法和属性,可以方便地对图像进行处理和操作。通过它,可以实现图像的读取、修改、保存等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值