天天看点

python图像数组操作与灰度变换Python图像数组操作与灰度变换

numpy是一个非常有名的 python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。

数组对象可以实现数组中重要的操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化。这为图像变形、对变化进行建模、图像分类、图像聚类等提供了基础。

在上一篇python基本图像操作中,当载入图像时,通过调用 array() 方法将图像转换成numpy的数组对象。numpy 中的数组对象是多维的,可以用来表示向量、矩阵和图像。通过对图像的数组进行直接操作,就可以完成很多图像处理。

numpy的相关知识网上有很多资料,作为python科学计算的基础,还是非常值得认真学习的。

通过下面这几个程序我们看一下图像与灰度图的图像数组,以及numpy数组的切片。

<b>运行结果:</b>

<b>我们看到的是一个三维数组,分别代表横坐标,纵坐标和颜色通道。</b>

我们可以通过数组把红蓝通道交换

这里用到了numpy数组的切片方式,关于numpy的资料网上有很多,就不过多叙述了。

python图像数组操作与灰度变换Python图像数组操作与灰度变换

在转为数组的过程中我们可以设定数据类型,同时灰度图的图像数组也是有意义的:

额外的参数‘f’将数组的数据类型转为浮点数

由于灰度图没有颜色信息,所以形状元组只有两个数值

<b>*array()变换的相反操作可以使用pil的fromarray()完成,如</b><code>im = image.fromarray(im)</code>

灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度。

可以通过下面几种方法,将图像转换为灰度:

1.浮点算法:gray=r*0.3+g*0.59+b*0.11

2.整数方法:gray=(r*30+g*59+b*11)/100

3.移位方法:gray =(r*76+g*151+b*28)&gt;&gt;8;

4.平均值法:gray=(r+g+b)/3;

5.仅取绿色:gray=g;

通过上述任一种方法求得gray后,将原来的rgb(r,g,b)中的r,g,b统一用gray替换,形成新的颜色rgb(gray,gray,gray),用它替换原来的rgb(r,g,b)就是灰度图了。

之前已经使用过很多次了,使用python可以通过使用convert(‘l’)来获得灰度图

将图像读入 numpy 数组对象后,我们可以对它们执行任意数学操作。一个简单的例子就是图像的灰度变换。即任意函数 f ,它将 0…255 区间(或者 0…1 区间)映射到自身。

下面程序中有一些简单的灰度变换:

python图像数组操作与灰度变换Python图像数组操作与灰度变换

可以比较明显的看到灰度变换的结果,,第二张图被反相显示,第三张图像的暗部变亮,亮部变暗,其值被限制在100到200之间,其中最后一张图像通过二次函数变换使较暗的像素值变得更暗。

本篇博客介绍了python使用图像数组去进行图像操作的过程,包括几个简单的实例,通过数组我们可以对图像进行任意数学操作,是图像变形、图像分类、图像聚类等的基础,希望我的博客对大家有所帮助~