Python使用Pillow和Matplotlib处理图片像素并实现图像合并

一颗松果
一颗松果
发布时间:2026-10-13| 2人浏览过
原创

本文介绍如何在Python 3.x环境下使用Pillow库获取图片的RGBA像素数据,并通过NumPy转换为二维数组。接着利用Matplotlib将处理后的像素数据渲染为图像并保存。文章提供了一个完整的示例,演示如何读取两张图片,通过自定义算法合并像素值,最终输出合成后的结果图片。

Python环境准备与Pillow安装

本文基于Python 3.x版本进行讲解。

首先需要安装Pillow库。

由于原始的PIL库仅支持到Python 2.7且已停止维护,志愿者们基于PIL创建了一个兼容Python 3.x的兼容版本,名为Pillow。该版本不仅支持最新Python版本,还加入了许多新特性,因此建议直接安装使用Pillow。

安装命令如下:


pip install pillow

获取图片像素数据

接下来介绍如何获取图片的像素点数据。


import numpy as np
from PIL import Image
img = Image.open("./b.png").convert('RGBA')
a_img = np.asarray(img)

获取到的图片像素数据是一个二维数组,可以将其视为二维坐标系。数组中的每个元素存储一个元组,分别代表红(R)、绿(G)、蓝(B)和透明度(A)通道的值。

使用Matplotlib保存处理结果

在分别计算并修改像素值后,需要将数据写回图片。此时可以使用Matplotlib库来完成图像的显示和保存操作。


import matplotlib.pyplot as plt
 
plt.figure("beauty") # 开启图层,名称为 beauty
plt.imshow(a_img) # 二维数组的数据
plt.axis('off')
#plt.show()
plt.savefig("./result.png")

下面提供一个完整的代码示例。

图片合并计算完整示例

本例演示如何将两张图片进行合并计算,并输出最终结果。

将上述两张图片进行合并处理。


from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
def modeSuperposition(basePixel,mixPixel,alpha):
 basePixel = int(basePixel)
 mixPixel = int(mixPixel);
 res=0
 if basePixel <= 128 :
  res = int(mixPixel) * int(basePixel) / 128;
 else:
  res = 255 - (255 - mixPixel)*(255 - basePixel) / 128;  
 a = alpha / 255; 
 if a > 1:
  a = 1
 res = (1-a)*basePixel + a*res 
 t = int(res)&-256
 if t == 0:
  return int(res)
 if res > 255:
  return 255 
 return 0 
def mergePoint(x,y):
 p1 = img1[x][y]
 p2 = img2[x][y]
 p1[1] = modeSuperposition(p1[0],p2[0],p2[3])
 p1[2] = modeSuperposition(p1[1],p2[1],p2[3])
 p1[3] = modeSuperposition(p1[2],p2[2],p2[3])  
imgA = Image.open('./b.png')
img1=np.array(imgA.convert('RGBA')) #打开图像并转化为数字矩
img2=np.array(Image.open("./light.png").convert('RGBA'))  
i = len(img1);
j = len(img1[0]);
 
for k in range(0,len(img2)):
 for n in range(0,len(img2[0])):
  if k < i and n < j:
   mergePoint(k,n)  
#img = Image.new("RGBA",imgA.size)###创建一个5*5的图片
plt.figure("beauty") # 开启图层,名称为 beauty
plt.imshow(img1) # 二维数组的数据
plt.axis('off')
#plt.show()
plt.savefig("./result.png")

最终生成的结果图片如下所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。