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

相关文章

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.