python用numpy和pil处理图像成灰度图_基本的图像操作和处理示例(Python语言)

本文使用Python的一些工具包(PIL、Matplotlib、Numpy以及SciPy)进行了简单的图像处理。下面会简单介绍这些工具包的功能及示例。

1.1 PIL:Python图像处理类库

PIL(Python Imaging Library)提供了通用的图像处理功能,以及大量有用的基本图像操作,如图像缩放、旋转、裁剪、颜色转换等。(PIL的下载地址:http://www.pythonware.com/products/pil/)

下面的例子是用PIL库实现将一张彩色图像转成灰度图像、复制图像并进行旋转变换再拷贝到原来的图像上、调整图像尺寸及旋转等基本的图像处理操作。

from PIL import Image

from pylab import *

# 显示原图

pil_im = Image.open('../Pictures/04.jpg')

subplot(231)

title('original image')

axis('off') #不显示图像的坐标轴

imshow(pil_im)

# 显示灰度图

pil_im = Image.open('../Pictures/04.jpg').convert('L')

gray()

subplot(232)

title('gray image')

axis('off')

imshow(pil_im)

#拷贝粘贴区域

pil_im = Image.open('../Pictures/04.jpg')

box = (100,100,400,400)

region = pil_im.crop(box) #将图像拷贝到指定区域

region = region.transpose(Image.ROTATE_180) #对图像进行旋转变换

pil_im.paste(region,box)

subplot(233)

title('copy image')

axis('off')

imshow(pil_im)

# 缩略图

pil_im = Image.open('../Pictures/04.jpg')

size = 32,64

pil_im.thumbnail(size) #将图像缩成指定大小

subplot(234)

title('thumbnail image')

axis('off')

imshow(pil_im)

pil_im.save('../Pictures/05.jpg') #保存缩略图

# 调整图像尺寸

pil_im = Image.open('../Pictures/04.jpg')

pil_im = pil_im.resize(size)

subplot(235)

title('resize image')

axis('off')

imshow(pil_im)

# 旋转图像45°

pil_im = Image.open('../Pictures/04.jpg')

pil_im = pil_im.rotate(45)

subplot(236)

title('rotate 45°')

axis('off')

imshow(pil_im)

show()

运行代码得到的结果如下:

python用numpy和pil处理图像成灰度图_基本的图像操作和处理示例(Python语言)_第1张图片

1.2 Matplotlib库

当在处理数学及绘图或在图像上描点、画直线、曲线时,Matplotlib是一个很好的绘图库,具有比PIL更强大的绘图功能。Matplotlib中的PyLab接口包含很多方便用户创建图像的函数。(Matplotlib的下载地址: http://matplotlib.sourceforge.net/)

下面是用Matplotlib库绘制出图像的轮廓和直方图。

from PIL import Image

from pylab import *

figure()

subplot(121)

im = array(Image.open('../Pictures/04.jpg').convert('L'))

gray()

contour(im, origin='image')

axis('equal')

axis('off')

title('image edge')

subplot(122)

hist(im.flatten(), 128)

plt.xlim([0,260])

plt.ylim([0,11000])

show()

运行上面代码,可以得到下面的结果:

python用numpy和pil处理图像成灰度图_基本的图像操作和处理示例(Python语言)_第2张图片

1.3 NumPy库

NumPy是Python一个流行的用于科学计算包。它包含了很多诸如矢量、矩阵、图像等其他非常有用的对象和线性代数函数。NumPy中的数组对象可以帮助你实现数组中重要操作,如矩阵乘积、转置、向量乘积和归一化等。(NumPy的下载地址:http://www.scipy.org/Download)

在前面载入图像的示例中,我们将图像用array()函数转为NumPy数组对象,但是并没有提到它表示的含义。数组就像列表一样,只不过它规定了数组中的所有元素必须是相同的类型。在读入图像到NumPy数组后,就可以对它进行任何我们想要的操作了。前面已经对图像进行了灰度变换,现在要举一个极其有用的例子——灰度变换后进行直方图均衡化。通过直方图均衡化可以增加图像对比度。下面是对图像直方图进行均衡化处理的例子:

from PIL import Image

from pylab import *

from numpy import *

from PCV.tools import imtools

im = array(Image.open('../Pictures/04.jpg').convert('L')) # 打开图像,并转成灰度图像

im2, cdf = imtools.histeq(im)

figure()

subplot(2, 2, 1)

axis('off')

gray()

title('Original image')

imshow(im)

subplot(2, 2, 2)

axis('off')

title('Equalized image')

imshow(im2)

subplot(2, 2, 3)

title('Original histogram')

hist(im.flatten(), 128, normed=True)

subplot(2, 2, 4)

title('Equilibrium histogram')

hist(im2.flatten(), 128, normed=True)

show()

运行结果:

python用numpy和pil处理图像成灰度图_基本的图像操作和处理示例(Python语言)_第3张图片

1.4 SciPy库

SciPy是建立在NumPy的基础上,用于数值运算的开源工具包。它提供了很多有效的常规操作,包括数值综合、最优化、统计、信号处理以及图像处理。SciPy库包含了很多有用的模块,接下来只展示部分功能。(SciPy的下载地址:http://scipy.org/Download )

一个非常经典的图像卷积例子是对图像进行高斯模糊(即高斯滤波)。高斯模糊可以用于定义图像尺度、计算兴趣点以及很多其他的应用场合。下面是对图像进行高斯滤波的例子:

from PIL import Image

from pylab import *

from scipy.ndimage import filters

im = array(Image.open('../Pictures/04.jpg').convert('L'))

figure()

gray()

axis('off')

subplot(1, 4, 1)

axis('off')

title('original image')

imshow(im)

for bi, blur in enumerate([5, 10, 15]): #不同的标准差,模糊程度不同

im2 = zeros(im.shape)

im2 = filters.gaussian_filter(im, blur)

im2 = np.uint8(im2)

imNum=str(blur)

subplot(1, 4, 2 + bi)

axis('off')

title('sigma = '+imNum)

imshow(im2)

show()

运行上面代码,可得出下面的结果:

python用numpy和pil处理图像成灰度图_基本的图像操作和处理示例(Python语言)_第4张图片

Python的工具包介绍到这里就结束了。虽然内容不多,但还是希望对你有帮助。

学习笔记+1 :)

你可能感兴趣的:(python用numpy和pil处理图像成灰度图_基本的图像操作和处理示例(Python语言))