图像显示新工具:使用PIL, Matplotlib, OpenCV三种方法封装

版权申诉
0 下载量 82 浏览量 更新于2024-10-11 收藏 529KB ZIP 举报
资源摘要信息:"img_show.zip_matplotlib_pil_show" 本压缩包包含了使用Python进行图像显示的多种方法,具体涉及到了PIL(Python Imaging Library,后改名为Pillow)、matplotlib和opencv三个库,这些库广泛应用于图像处理和数据可视化领域。以下详细介绍了各个知识点: 1. PIL库 PIL是Python的一个图像处理库,它提供了丰富的操作图像的功能,包括图像的创建、修改、保存等。Pillow是PIL的一个分支,提供了更为友好的API,是当前广泛使用的图像处理库。在本压缩包中,PIL被用于封装一个函数来显示图像,这个函数可以接受一个numpy数组或者一个文件路径作为输入参数,并将图像显示出来。 2. matplotlib库 matplotlib是一个Python的2D绘图库,能够以多种硬拷贝格式和跨平台的交互环境生成出版质量级别的图形。它通常用于生成各种静态、动态和交互式的图表。在本压缩包中,matplotlib也被用于封装一个图像显示函数,可以处理numpy数组和文件路径作为参数,并展示图像。 3. OpenCV库 OpenCV是一个开源的计算机视觉和机器学习软件库,由一系列C函数和C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV支持多种编程语言,包括Python,并提供了丰富的图像处理功能。在本压缩包中,OpenCV被用作封装图像显示函数,同样可以处理numpy数组和文件路径输入参数,并展示图像。 4. numpy数组 numpy是一个开源的Python库,用于科学计算,它支持维度数组与矩阵运算,是数据分析和数学运算的重要工具。在本压缩包中,numpy数组作为图像的一种数据表示方式,可以被上述提到的函数处理并显示。 5. 图像文件路径 在本压缩包的上下文中,图像文件路径指的是指向存储图像数据的文件的路径。无论是PIL、matplotlib还是opencv封装的图像显示函数,都可以接受图像文件路径作为输入参数,从而读取文件并显示图像。 6. 封装函数 封装是一种编程技巧,指的是将一组语句的集合(通常是相关功能的函数或过程)编译成一个单元,以便复用和简化代码。在本压缩包中,图像显示功能被封装成函数,使得用户可以简单地通过传入numpy数组或者文件路径来调用函数显示图像,无需每次都编写冗长的代码。 具体实现中,每个库都有自己的图像显示方法。例如,PIL库中的Image.show()方法用于直接显示图像,matplotlib中的imshow()函数用于显示图像,而opencv中的cv2.imshow()函数用于在窗口中显示图像。尽管每个库都有不同的方法来实现相同的功能,但它们都能被封装成通用的接口来简化用户的使用。 总结来说,img_show.zip_matplotlib_pil_show压缩包集中展示了如何利用Python中的PIL、matplotlib和opencv三个库来实现图像的显示功能,这些技术能够被广泛应用于图像处理、数据可视化以及计算机视觉领域中的图像展示等任务。

import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l import matplotlib.pyplot as plt d2l.use_svg_display() #通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式 #并除以255使得所有像素的数值均在0-1之间 trans = transforms.ToTensor() mnist_train = torchvision.datasets.FashionMNIST( root = r"E:\py\python\test\deep learning\data",train=True,transform=trans,download=True ) mnist_test = torchvision.datasets.FashionMNIST( root = r"E:\py\python\test\deep learning\data",train=False,transform=trans,download=True ) print(len(mnist_train),len(mnist_test)) print(mnist_train[0][0].shape) def get_fashion_mnist_labels(labels): #@save """返回Fashion-MNIST数据集的文本标签""" text_labels = ['t-shirt','trouser','pullover','dress','coat', 'sandal','shirt','sneaker','bag','ankle boot'] return [text_labels[int(i)] for i in labels] def show_images(imgs,num_rows,num_cols,titles = None,scale=1.5): #@save """绘制图像列表""" figsize = (num_cols * scale,num_rows * scale) _,axes = d2l.plt.subplot(num_rows,num_cols,figsize=figsize) axes = axes.flatten() for i,(ax,img) in enumerate(zip(axes,imgs)): if torch.is_tensor(img): #图片张量 ax.imshow(img.numpy()) else: #PIL图片 ax.imshow(img) ax.axes.get_xaxis().set_visible(False) ax.axes.get_yaxis().set_visible(False) if titles: ax.set_title(titles[i]) return axes X,y = next(iter(data.DataLoader(mnist_train,batch_size=18))) show_images(X.reshape(18,28,28),2,9,titles=get_fashion_mnist_labels(y)); 这段代码运行不出来

2023-07-15 上传