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 图像处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ union用法

在C中,union是一种特殊的数据类型,可以在同一个内存位置存储不同的数据类型。它的用法如下: 1. 声明union类型:使用关键字union加上union名称来声明一个union类型。 c union UnionName { dataType1 member1; dataType2 …

SpringBoot 文件上传(三)

之前讲解了如何接收文件以及如何保存到服务端的本地磁盘中: SpringBoot 文件上传(一)-CSDN博客 SpringBoot 文件上传(二)-CSDN博客 这节讲解如何利用阿里云提供的OSS(Object Storage Service)对象存储服务保存文件。…

2024华为软件精英挑战赛记录

前言 本次主要是记录自己第一次参加华为软件挑战赛的经历。第一次参加比赛还是缺少经验,训练赛中拿到赛区的20多名,最后在正式赛中被反超了,只拿了40多名,实在是感到可惜。 题目:本次题目是一个智慧港口的问题。10个机…

vite5+vue3+ import.meta.glob动态导入vue组件

import.meta.glob 是 Vite 提供的一个特殊功能,它允许你在模块范围内动态地导入多个模块。这在处理大量的文件,如组件、页面或其他模块时特别有用,特别是当你需要根据某些条件或模式来动态加载它们时。 1.创建需要动态导入的组件目录 假设你…

设计模式—观察者模式与发布订阅

观察者设计模式 观察者设计模式(Observer Design Pattern)是一种常用的软件设计模式,它是一种行为型模式。该模式用于定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知…

FTP 文件传输服务

FTP连接 控制连接:TCP 21,用于发送FTP命令信息 数据连接:TCP 20,用于上传、下载数据 数据连接的建立类型: 主动模式:服务端从 20 端口主动向客户端发起连接 被动模式:服务端在指定范围…

flink-connector-redis支持select查询

EN 1 项目介绍 基于bahir-flink二次开发,相对bahir调整的内容有: 1.使用Lettuce替换Jedis,同步读写改为异步读写,大幅度提升了性能 2.增加了Table/SQL API,增加select/维表join查询支持 3.增加关联查询缓存(支持增量与全量) 4…

flask_restful数据解析

参数验证也叫参数解析 Flask-Restful 插件提供了类似 WTForms 来验证提交的数据是否合法 的包,叫做 reqparse 。 # Flask_RESTFUl数据解析 from flask import Flask,render_template from flask_restful import Api,Resource from flask_restful.reqparse import …

项目3-留言板

1.创建项目 记得将project type改为maven 将需要的包引入其中 更改版本号 引入MYSQL相关包记得进行配置!!! spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncodingutf8&useSSLfalseusername: rootpassword:…

深入解析Oracle数据库中的外连接 (OUTER JOIN)

在Oracle数据库中,外连接用于从两个或更多表的连接操作中检索那些在至少一个表中有匹配记录的所有记录。外连接可以确保即使在另一个表中找不到匹配项,指定表中的记录也会出现在结果集中。外连接主要有三种类型: 左外连接 (LEFT OUTER JOIN)&…

sql server用nest typeorm实现索引的方式

针对您提到的索引类型,下面是使用TypeORM库在SQL Server中实现不同类型的索引的代码示例: 普通索引: import { Entity, Column, Index } from typeorm;Entity() Index(idx_name, [name]) export class User {Column()name: string;Column()…

JavaScript快速入门笔记之一(基本概念)

JavaScript快速入门笔记之一(基本概念) 前端三大语言: HTML:专门编写网页内容的语言CSS:专门美化网页样式的语言JavaScript:专门编写网页交互的语言 名词解释: 交互:输入数据&#…

C++ MFC 只启动一个程序实例 唤醒之前的实例(完整源码)

初级代码游戏的专栏介绍与文章目录-CSDN博客 很多时候我们希望只允许启动一个程序实例,如果再次运行,就唤醒之前的实例。 目录 1 概述 2 相关技术介绍 2.1 互斥对象 2.2 查找窗口 2.3 唤醒窗口 1 概述 技术上并不难,涉及到以下几个技术…

用redis lua脚本实现时间窗分布式限流

需求背景: 限制某sql在30秒内最多只能执行3次 需求分析 微服务分布式部署,既然是分布式限流,首先自然就想到了结合redis的zset数据结构来实现。 分析对zset的操作,有几个步骤,首先,判断zset中符合rangeS…

Java服务器开发的日志:日志的作用和使用方法;日志文件的定期归档、清理和滚动策略;ELK(又称Elastic Stack)

Java服务器开发的日志 Java服务器开发,为什么要使用日志? 应该怎样使用日志? 在Java服务器开发中使用日志是非常关键的一个实践,原因如下: 本文所说的“日志”,主要是指程序运行时生成的技术日志&#xff…

#AngularJS#$sce.trustAsResourceUrl

$sce.trustAsResourceUrl 是 AngularJS(一个旧版本的 Angular)中的安全上下文(Security Context)方法,用于信任一个 URL,使其可以作为资源 URL 使用,而不会触发 AngularJS 的安全警告或阻止。 …

使用JMeter进行梯度压测

使用JMeter进行梯度压测 梯度压测配置如下: 使用线程:5,然后循环5000次,共2.5万个样本使用线程:10,然后循环5000次,共5万个样本使用线程:15,然后循环5000次,共7.5万个样本使用线程:20&#xff…

Redis中的事件

事件 概述 Redis服务器是一个事件驱动程序:服务器需要处理以下两类事件: 1.文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件…

上位机图像处理和嵌入式模块部署(qmacvisual自定义插件代码分析)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 qmacvisual里面的第三方插件主要由两部分组成,一部分是ExtensionLibrary,也就是插件的容器,这个是官方提供的&a…

【机器学习】贝叶斯上篇(详解)

深入理解贝叶斯学习:核心原理及应用全解析 在机器学习的领域内,贝叶斯学习作为一种强大的框架,使我们能够在不确定性条件下进行预测和决策。贝叶斯学习源于托马斯贝叶斯的工作,提供了一种概率论的学习方法,与传统的频…