使用numpy处理图片——基础操作

numpy是一款非常优秀的处理多维数组的Python基础包。在现实中,我们最经常接触的多维数组相关的场景就是图像处理。本系列将通过若干篇对图像处理相关的探讨,来介绍numpy的使用方法,以获得直观的体验。

本系列使用的照片使用的是RGBA色彩空间模型,即一个像素点,要通过R(Red红色)、G(Green绿色)、B(Blue蓝色)和A(Alpha通道)组成。前三种三原色比较好理解,即一个颜色可以通过红绿蓝三种颜色组成;Alpha则是代表透明度,0代表完全透明,255代表完全不透明,中间的数值则代表相应程度的半透明。

可以看到Alpha 255的图片,背景是白色的,且是不透明的;而Alpha 0背景区域是完全透明。

一张图片,我们看成是一个像素组成的二维数组;

如果每个像素用RGBA表示,则演变成一个三维数组。只是之前的每个元素变成了一个长度为4的维度。

准备工作

下面是一张960*1536,背景色是白色,完全不透明的图片------example.png。后面我们将针对这张图片做相关处理。

为了能读取图片,我们需要安装另外一个python包

bash 复制代码
pip3 install pillow

图片像素大小

如果翻译成numpy相关的知识,就是获取数组的大小。这儿我们要使用shape属性

python 复制代码
from PIL import Image
import numpy as np
img = Image.open('example.png')
data = np.array(img)
print(data.shape)

(960, 1536, 4)

可以见得我们将图片变成了一个3维数组:960表示高度,1536表示宽度,4表示深度。

修改透明度

如果翻译成numpy相关的知识,就是修改数组中第三个维度(RGBA)的第四个位置(A)的值。

python 复制代码
from PIL import Image
import numpy as np
img = Image.open('example.png')
data = np.array(img)

data[:,:,3]= 32

newImg = Image.fromarray(data)
newImg.save('alpha32.png')

上面代码将Alpha通道值改成了32,即一种半透明状态。

代码的第6行,第一个":"表示所有的第一维度(高),第二个":"表示所有的第二维度(宽),3表示Alpha通道所在的RGBA中的下标。

这种写法,比逐个遍历数据要方便的多。

相关推荐
君名余曰正则6 小时前
机器学习实操项目01——Numpy入门(基本操作、数组形状操作、复制与试图、多种索引技巧、线性代数)
线性代数·机器学习·numpy
一车小面包1 天前
人工智能中的线性代数总结--简单篇
人工智能·numpy
__Bolide__8 天前
【不说废话】pytorch张量相对于numpy数组的优势
人工智能·pytorch·numpy
胖祥9 天前
NumPy/PyTorch/C char数组内存排布
c语言·pytorch·numpy
云烟成雨TD9 天前
NumPy 2.x 完全指南【三十二】通用函数(ufunc)之数学运算函数
python·机器学习·numpy
深兰科技9 天前
柳州市委常委、统战部部长,副市长潘展东率队首访深兰科技集团新总部,共探 AI 赋能制造大市与东盟合作新局
人工智能·beautifulsoup·numpy·pyqt·matplotlib·pygame·深兰科技
麻雀无能为力13 天前
python自学笔记14 NumPy 线性代数
笔记·python·numpy
麻雀无能为力13 天前
python 自学笔记13 numpy数组规整
笔记·python·numpy
CodeCraft Studio17 天前
Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
python·excel·numpy·aspose·数据表格·aspose.cells·excel文档格式转换
R-G-B22 天前
OpenCV Python——Numpy基本操作(Numpy 矩阵操作、Numpy 矩阵的检索与赋值、Numpy 操作ROI)
python·opencv·numpy·numpy基本操作·numpy 矩阵操作·numpy 矩阵的检索与赋值·numpy 操作roi