python语言实现基本图像处理(PIL)

1、输出原本图像:
利用PIL中的函数,可以从大多数图像格式的文件中读取数据,然后写入最常见的图像格式文件中,可使用Image读取图像。

from PIL import Image
pil_im = Image.open('C:/Users/dell/Desktop/a.jpg')
pil_im.show()

python语言实现基本图像处理(PIL)_第1张图片
1.1、绘制图像轮廓与直方图
图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。用hist( )函数绘制(灰度)图像的直方图。hist()函数中的第二个参数指定小区间的数目。但需注意,因为hist()只接受一维数组作为输入,所以在绘制直方图之前,需先对图像进行压平处理。因为绘制轮廓需要对每个坐标[x,y]的像素值施加同一个阈值,所以先将图像灰度化,在图像上加上convert(‘L’)即可。

from PIL import Image
from pylab import *
#读取图像到数组中
im = array(Image.open('C:/Users/dell/Desktop/a.jpg').convert('L'))
figure()
gray()    #不使用颜色
contour(im, origin='image')  #在原点的左上角显示轮廓图像
axis('equal')
axis('off')
figure()
hist(im.flatten(),128)
show()

flatten()方法将任意数组按照行优先准则转换成一维数组。
python语言实现基本图像处理(PIL)_第2张图片
1.2、图像直方图均衡化
直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的的分布概率都相同。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。在这种情况下,直方图均衡化的变换函数是图像中像素值的累积分布函数(简写为cdf,将像素值的范围映射到目标范围的归一化操作)。
计算累积分布函数时,依次对每一个灰度像素值使用cdf进行线性插值,计算灰度图像新的像素值。interp(x,xp,yp)输入原函数一系列点(xp,yp),使用线性插值方法模拟函数并计算原始函数。

from PIL import Image
from pylab import *
#读取图像到数组中,并进行灰度化操作
im = array(Image.open('C:/Users/dell/Desktop/a.jpg').convert('L'))
subplot(221)
hist(im.flatten(),256)
#计算图像的直方图
imhist,bins = histogram(im.flatten(),256,normed=True)
cdf = imhist.cumsum() #累积分布函数
cdf = cdf*255/cdf[-1] #归一化
im2 = interp(im.flatten(),bins[:256],cdf)
im2 = im2.reshape(im.shape)
subplot(222)
hist(im2.flatten(),256) 
gray()
subplot(223)
imshow(im)
subplot(224)
imshow(im2)
show()

注意,函数中使用到累积分布函数的最后一个元素(下表为-1),目的是将其归一化到0…1范围。
python语言实现基本图像处理(PIL)_第3张图片
1.3、高斯滤波处理图像
高斯模糊通常是其他图像处理操作的一部分,比如图像插值操作。兴趣点计算以及其他应用等。本质上,图像模糊就是将(灰度)图像I和一个高斯核进行卷积操作。

from PIL import Image
from numpy import *
from scipy.ndimage import filters

im = array(Image.open('C:/Users/dell/Desktop/a.jpg').convert('L'))
im2=filters.gaussian_filter(im,5)
im3=Image.fromarray(im2)
im3.show()

python语言实现基本图像处理(PIL)_第4张图片

你可能感兴趣的:(python语言实现基本图像处理(PIL))