发布网友
共1个回答
热心网友
深度学习算法中,图像处理相关操作和转换涉及以下基本库函数:opencv、pillow、torchvision(tensor)、numpy。
以下是这些库的基本转换介绍。
请注意,tensor通常对图像进行了归一化处理,在将tensor转换为图像时,需要注意这一点。
opencv的颜色通道顺序是BGR,而PIL和torch中的图像颜色通道顺序是RGB。
通过阅读torchvision的源码,我发现transforms中使用的库是numpy和pillow,因此最推荐的方法是使用tensor和pillow。
相应的接口包括:
transforms.ToTensor():将图像转换为tensor。
pic (PIL Image or numpy.ndarray): Image to be converted to tensor.
transforms.ToPILImage():将tensor或ndarray转换为PIL Image。此转换不支持torchscript。
个人偏好使用Pillow和tensor之间的转换方式:首先使用Pillow读取图像,然后直接使用torchvision函数将PIL图像转换为tensor。其次,使用torchvision函数将tensor转换为PIL图像,然后使用Pillow进行图像存储。
关于tensor和opencv的转换,个人认为使用opencv转换tensor比较方便,但tensor转换opencv图像可能会遇到一些问题。
tensor转换为opencv图像的过程是:首先将tensor转换为numpy数组,然后将numpy数组转换为opencv的mat数据。
numpy和tensor之间的转换不是非常常用,后续如有需要再补充。
numpy和pillow之间的转换包括:numpy转换为pillow,pillow转换为numpy。
opencv和pillow之间的转换包括:opencv转换为pillow,pillow转换为opencv。
库函数介绍:
Pillow是一个用于图像处理的Python库,基于Python Imaging Library (PIL)开发。它提供了广泛的图像处理功能,包括图像打开、保存、裁剪、缩放、旋转、滤镜、颜色转换等操作。支持多种常见图像格式,如JPEG、PNG、BMP、GIF、TIFF等。
Pillow的API设计简单,易于使用。它提供了一个Image类,可以方便地创建、操作图像对象。同时,还提供了ImageDraw、ImageFont、ImageFilter等类,用于绘制图像、操作字体、应用滤镜等。
NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,还提供了大量的数学函数库。NumPy的前身是Numeric,由Jim Hugunin与其他协作者共同开发。2005年,Travis Oliphant在Numeric中结合了Numarray的特色,并加入了其他扩展,开发了NumPy。NumPy是开放源代码,由许多协作者共同维护开发。
NumPy是一个运行速度非常快的数学库,主要用于数组计算,包括: