Pillow教程05:NumPy数组和PIL图像的相互转化

2024-03-26 06:12

本文主要是介绍Pillow教程05:NumPy数组和PIL图像的相互转化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

---------------Pillow教程集合---------------

Python项目18:使用Pillow模块,随机生成4位数的图片验证码

Python教程93:初识Pillow模块(创建Image对象+查看属性+图片的保存与缩放)

Pillow教程02:图片的裁剪+复制粘贴+旋转角度+翻转+降噪滤镜(平滑、锐化、边缘检测)

Pillow教程03:图像处理的基本步骤+分离split+合并merge+混合blend+composite遮罩

Pillow教程04:学习Draw绘制+Font字体+alpha composite方法,给图片添加文字水印

1.Image.fromarray():用于从NumPy数组创建PIL图像。NumPy数组通常用于科学计算,并且它允许你以高效的方式处理大型多维数组和矩阵。当你有一个NumPy数组,并且该数组的数据类型和形状适合表示图像时,你可以使用Image.fromarray()来将这个数组转换为一个PIL图像对象。

2.numpy.full 是 NumPy 库中的一个函数,用于创建一个具有给定形状和填充值的数组。它的语法如下:

numpy.full(shape, fill_value, dtype=None, order='C')

参数解释:
shape:输出的数组形状,例如 (2, 3) 表示一个 2x3 的二维数组。
fill_value:用于填充值。
dtype:输出数组的数据类型。如果未指定,则根据 fill_value 的类型推断。
order:指定数组在内存中的存储顺序,可以是 ‘C’(按行)或 ‘F’(按列)。

import numpy as np# 1.创建一个形状为 (3,)的数组,并用值 5 填充  
arr1 = np.full((3,), 5)
print(arr1)  # 输出: [5 5 5]  # 2.创建一个形状为 (2, 2) 的数组,并用值 7 填充  
arr2 = np.full((2, 2), 7)
print(arr2)  # 输出:  
# [[7 7]  
#  [7 7]]  # 3.创建一个形状为 (2, 3) 的数组,并用字符串 'a' 填充  
arr3 = np.full((2, 3), 'a')
print(arr3)  # 输出:  
# [['a' 'a' 'a']  
#  ['a' 'a' 'a']]

在这里插入图片描述
3.代码解析:创建了一个全黑的400x400像素图像。然后,它定义了四种颜色(红色、绿色、蓝色和黄色),并将这些颜色分配给四个200x200像素的小块。最后,它使用np.full来创建每个小块的颜色数组,并将这些数组放置到原始图像数组的相应位置。完成这些步骤后,你就可以得到一个被四种颜色平均分割的图像了。NumPy数组的形状通常对应于图像的宽度、高度和(可能的)颜色通道数。

# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import numpy as np
from PIL import Image# 1.创建全黑的原始图像数组
# 原始图像尺寸
width, height = 400, 400
# 每个小块的尺寸
block_size = 200
array = np.zeros((height, width, 3), dtype=np.uint8)# 定义四种颜色(这里用RGB值表示)
colors = [(255, 0, 0),  # 红色(0, 255, 0),  # 绿色(0, 0, 255),  # 蓝色(255, 255, 0)  # 黄色
]# 2.遍历每个小块并填充颜色
for i in range(2):for j in range(2):# 计算当前小块的左上角坐标x_start = j * block_sizey_start = i * block_size# 创建当前小块的颜色数组block_color = np.full((block_size, block_size, 3), colors[i * 2 + j], dtype=np.uint8)# 将颜色数组填充到原始图像数组的对应位置array[y_start:y_start + block_size, x_start:x_start + block_size] = block_color# 3.使用Image.fromarray将NumPy数组转换为图像
image = Image.fromarray(array)# 4.保存图像
image.save('colored_blocks.png')

4.图像转化为ndarray数组:image_array现在是一个包含图像数据的三维NumPy数组。数组的第一个维度是图像的高度(行数),第二个维度是图像的宽度(列数),第三个维度是颜色通道数(对于RGB图像通常是3)。数组中的每个元素对应图像中的一个像素,其值表示该像素在对应颜色通道中的强度。

# @Author : 小红牛
# 微信公众号:WdPython
from PIL import Image
import numpy as np# 1.打开图像文件
# 替换为你的图像文件路径
image = Image.open('path_to_your_image.png')# 2.将图像转换为ndarray数组
image_array = np.array(image)# 3.输出数组的形状和数据类型
print(image_array.shape)  # 输出图像的尺寸(高度, 宽度, 通道数)  
print(image_array.dtype)  # 输出数组的数据类型,通常是uint8  # 4.如果你想查看数组中的一部分数据,可以这样做:
print(image_array[:10, :10])  # 输出图像左上角10x10像素区域的数据# 5.ndarray数组转换为Image图像
arr_img = Image.fromarray(image_array)
# 保存图片
arr_img.save('array.png')

完毕!!感谢您的收看

----------★★历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame 图像处理

这篇关于Pillow教程05:NumPy数组和PIL图像的相互转化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847511

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.