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