1. 从矩阵到图片的显示方法与保存
1.1 PIL实现
from PIL import Image image= Image.fromarray(img) image.show() # 如果是在jupyter notebook上image就可以输出结果 image.save('image.png')
1.2 Matplotlib实现
import matplotlib.pyplot as plt plt.imshow(image) plt.savefig('image.png')
1.3 OpenCV实现
import cv2 cv2.imshow("image", image) cv.imwrite('image.png', image) cv2.waitKey(0) cv2.destroyAllWindows()
1.4 Numpy实现
numpy可以直接将图像矩阵保存为数据,np.array数据可以通过np.save函数直接保存在磁盘上,扩展名为.npy, 通过np.load函数直接恢复
import numpy # 会在保存的名字后面自动加上'.npy', 所以保存的全称为'array.npy' numpy.save('array', image) array = numpy.load('array.npy') # 判断保存与读取的矩阵是否一致 (array == image).all() #返回True,代表一致
1.5 Torchvision实现
- Torchvision实现保存图像:save_image
import torch from torchvision.utils import save_image import numpy # 读取图像矩阵 array = numpy.load('array.npy') # (h,w,c) -> (c,h,w) image = torch.FloatTensor(array).permute(2, 0, 1).unsqueeze(0) save_image(image, 'image.png', normalize=True) # 保存图像
image.png:
- Torchvision实现显示图像设置:make_grid
from torchvision import datasets, transforms from torchvision.utils import make_grid from torch.utils.data import DataLoader import matplotlib.pyplot as plt import numpy as np %matplotlib inline # 使用matplotlib来显示图像 def show(img): npimg = img.numpy() plt.figure(figsize=(12, 12)) plt.axis('off') # 不显示坐标轴 plt.imshow(np.transpose(npimg, (1,2,0)), interpolation='nearest') # 加载mnist数据集 transform = transforms.Compose([ transforms.ToTensor(), ]) dataset = datasets.MNIST(root='./dataset/', train=True, transform=transform, download=False) dataloader = DataLoader(dataset=dataset, batch_size=256, shuffle=True) # 获取一批256个数据 image, label = iter(dataloader).next() # 制作图像网格输出显示 batch_image = make_grid(image, nrow=16) save_image(batch_image, 'image.jpg', normalize=True) # 保存图像 show(batch_image) # 显示图像
image.jpg:
更多关于make_grid的参考资料:https://gist.github.com/anonymous/bf16430f7750c023141c562f3e9f2a91
ps: 除了make_grid,save_image;torchvision.utils中还实现了几个好用的函数
- draw_bounding_boxes:在给定图像上绘制边界框
- draw_segmentation_masks:在给定的 RGB 图像上绘制分割蒙版
- draw_keypoints:在给定的 RGB 图像上绘制关键点
- flow_to_image:将光流转换为 RGB 图像
2. 从路径到图片的显示方法
2.1 PIL实现
from PIL import Image image = Image.open('./result.jpg') image.show()
2.2 Matplotlib实现
import matplotlib.pyplot as plt image = plt.imread('./result.jpg') plt.imshow(image)
2.3 OpenCV实现
import cv2 image = cv2.imread('./result.jpg') cv2.imshow("image", image) cv2.waitKey(0) cv2.destroyAllWindows()
参考资料:
1. Python中读取,显示,保存图片的方法
2. make_grid的官方测试demo