【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


目录
相关文章
|
算法 数据挖掘
【数据挖掘】岭回归Ridge讲解及实战应用(超详细 附源码)
【数据挖掘】岭回归Ridge讲解及实战应用(超详细 附源码)
1057 0
|
8月前
|
数据采集 JSON API
Python 进阶爬虫:解析知识星球 API
Python 进阶爬虫:解析知识星球 API
|
6月前
|
人工智能 自然语言处理 运维
2026年企业级智能客服系统建设方案:大模型驱动升级AI客服系统
2026年,瓴羊Quick Service作为AI原生智能客服平台,以大模型为核心引擎,覆盖全渠道接入、智能对话、知识管理、人机协同与数据运营五大模块,助力中大型企业快速落地智能化服务,实现降本增效、体验升级与业务反哺。(239字)
|
9月前
|
人工智能 物联网 API
大模型仿真进阶攻略:一文看透LoRA与QLoRA,让你的AI更懂业务
本文深入解析大模型微调三大技术:全量微调、LoRA与QLoRA,对比其原理、资源需求与适用场景,并手把手教你用低显存显卡炼出专属领域模型。结合实践代码与效果评估方法,助力开发者低成本实现AI私有化部署,打造懂业务的“私人助理”。
731 1
|
机器学习/深度学习 数据可视化 计算机视觉
【YOLOv8改进 - 注意力机制】Triplet Attention:轻量有效的三元注意力
**摘要:** 本文提出TripletAttention,一种轻量级的计算机视觉注意力机制,通过三分支结构增强跨维度交互。该方法利用旋转操作和残差变换在通道和空间维度上建立依赖,提升模型性能,同时保持低计算成本。作为附加模块,它能集成到现有骨干网络中,适用于图像分类及目标检测等任务。实验证实在ImageNet-1k、MSCOCO和PASCAL VOC上取得良好效果,并提供GradCAM可视化分析。代码已开源:[GitHub](https://github.com/LandskapeAI/triplet-attention)。
1198 118
|
算法 Java
算法系列之回溯算法
回溯算法(Backtracking Algorithm)是一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,遇到正确解将其记录,直到找到了所有的解或者尝试了所有的可能为止。
967 4
算法系列之回溯算法
|
关系型数据库 决策智能
YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题
YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题
2283 6
|
机器学习/深度学习 编解码 计算机视觉
YOLOv11改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点
YOLOv11改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点
1796 0
YOLOv11改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点
|
JavaScript
vue2.0 + element-ui 实战项目-点击按钮弹出form表单(五)
vue2.0 + element-ui 实战项目-点击按钮弹出form表单(五)
968 0
|
存储 安全 数据库
除了 HashMap,还有哪些数据结构可以实现键值对存储?
【10月更文挑战第11天】 除了`HashMap`,其他常见支持键值对存储的数据结构包括:`TreeMap`(基于红黑树,键有序)、`LinkedHashMap`(保留插入顺序)、`HashTable`(线程安全)、`B-Tree`和`B+Tree`(高效存储大量数据)、`SkipList`(通过跳跃指针提高查找效率)及`UnorderedMap`(类似`HashMap`)。选择合适的数据结构需根据排序、并发、存储和查找性能等需求。