【39】多种方法实现矩阵的图像显示与保存

简介: 【39】多种方法实现矩阵的图像显示与保存

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:

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:

image.png

更多关于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


目录
相关文章
利用矩阵进行平移,旋转,缩放等图像变换、创建第二个一模一样的图像并使之进行缩放等操作
利用矩阵进行平移,旋转,缩放等图像变换、创建第二个一模一样的图像并使之进行缩放等操作
|
8月前
|
存储 机器学习/深度学习 算法
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
|
计算机视觉
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
237 0
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
570 0
|
机器学习/深度学习 人工智能 文字识别
OpenCV-字典法实现数字识别(尺寸归一化+图像差值)
OpenCV-字典法实现数字识别(尺寸归一化+图像差值)
143 0
第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。
简介:第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。
第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。
|
6月前
|
存储 C# 计算机视觉
将彩色图转化为灰度图及其原理介绍
将彩色图转化为灰度图及其原理介绍
131 0
对图片坐标进行线性映射
import cv2path = "obama2.jpg"img = cv2.imread(path)y, x, c_1 = (list(img.shape))print(x, ",", y, ",", c_1)img = cv2.
1016 0
|
机器学习/深度学习 算法 计算机视觉
数字图像处理实验(一)|图像的基本操作和基本统计指标计算{图像读取imread、图像写入imwrite、图像显示imshow、图像的相关统计量|均值、方差、大小尺寸裁减旋转|}(附实验代码和实验截图)
数字图像处理实验(一)|图像的基本操作和基本统计指标计算{图像读取imread、图像写入imwrite、图像显示imshow、图像的相关统计量|均值、方差、大小尺寸裁减旋转|}(附实验代码和实验截图)
527 0
数字图像处理实验(一)|图像的基本操作和基本统计指标计算{图像读取imread、图像写入imwrite、图像显示imshow、图像的相关统计量|均值、方差、大小尺寸裁减旋转|}(附实验代码和实验截图)
|
4月前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
92 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆

热门文章

最新文章