python图像处理---python的图像处理模块Image-

时间:2024-04-04 11:39:26

【python图像处理】python的图像处理模块Image

 

版本信息:2.7.11

环境:windows 7 64位系统

编辑器:PyCharm

运行工具:PyCharm

文件地址:D:\phpStudy\WWW\python\Image

一、引入图像模块

1. PIL简介:PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。利用 PIL 中的函数,我们可以从大多数图像格式的文件中读取数据,然后写入最常见的图像格式文件中。PIL 中最重要的模块为 Image 。

 

2. 引入PIL:

 
  1. from PIL import Image

注意:有一些教程默认是用import Image的,但是在window 的64位系统中如果没有在cmd中执行pip install PIL是找不到Image模块的,所以呢必须先安装Pillow,在cmd中运行pip install Pillow,这里也要变成from PIL import Image

 

二、读取与存储操作

1. PIL 的 open() 函数用于创建 PIL 图像对象,比如读取一张图片:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')

注意:在该路径下必须有qq_image.jpg图片,否则会出错

 

2. 存储图片:

save() 方法用于保存图像到具有指定文件名的文件。通过 save() 方法,PIL 可以将图像保存成多种格式的文件,PIL 是个足够智能的类库,可以根据文件扩展名来判定图像的格式。比如:img.save('qq_image_thumb.jpg', 'JPEG'),PIL 函数会进行简单的检查,如果文件不是 JPEG 格式,会自动将其转换成 JPEG 格式;如果转换失败,它会在控制台输出一条报告失败的消息。

 

为了效果,生成缩略图并且保存为qq_image_thumb.jpg:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 生成缩略图
  8. img.thumbnail((128, 128))
  9.  
  10. # 保存图片
  11. img.save('qq_image_thumb.jpg', 'JPEG')

运行后,进去文件目录:

python图像处理---python的图像处理模块Image-

 

三、图像的一些基本操作

1. 输出图片的信息(格式、尺寸以及图像类型)

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 输出图片的格式,尺寸以及图像类型
  8. print img.format, img.size, img.mode

输出:JPEG (355, 346) RGB

 

2. 显示图片

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 显示图片
  8. img.show()

在PyCharm下运行呢,会直接调用Windows照片查看器来显示图片

 

3. 生成缩略图

thumbnail() 方法接受一个元组参数(该参数指定生成缩略图的大小),然后将图像转换成符合元组参数指定大小的缩略图。

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 生成缩略图
  8. img.thumbnail((128, 128))
  9.  
  10. # 显示图片
  11. img.show()

这样运行之后就会显示128*128的图片

 

4. 旋转图片

要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用 rotate() 方法:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 逆时针旋转45度
  8. rorate1 = img.rotate(45)
  9. rorate1.show()
  10.  
  11. # 逆时针旋转90
  12. rorate2 = img.transpose(Image.ROTATE_90)
  13. rorate2.show()

运行后如图:

rorate1:

python图像处理---python的图像处理模块Image-

由于尺寸不变,旋转45度之后会填白

 

rorate2:

python图像处理---python的图像处理模块Image-

 

注意:只有选择90度,180度以及270度的时候才能用img.transpose(Image.ROTATE_90),其他角度用rotate

 

5. 翻转

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 左右对换
  8. rorate3 = img.transpose(Image.FLIP_LEFT_RIGHT)
  9. rorate3.show()
  10.  
  11. # 上下翻转
  12. rorate4 = img.transpose(Image.FLIP_TOP_BOTTOM)
  13. rorate4.show()

运行后:

rorate3:

python图像处理---python的图像处理模块Image-

 

rorate4:

python图像处理---python的图像处理模块Image-

 

6. 缩放图片

要调整一幅图像的尺寸,我们可以调用 resize() 方法。该方法的参数是一个元组,用来指定新图像的大小:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 缩放图片为50*50
  8. resize1 = img.resize((50, 50))
  9. resize1.show()

 

7. 图片灰度化

图像的颜色转换可以使用 convert() 方法来实现。要读取一幅图像,并将其转换成灰度图像,只需要加上 convert('L'),如下:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 图片转换为灰度
  8. grey = img.convert('L')
  9. grey.show()

运行后:

python图像处理---python的图像处理模块Image-

 

8. 某个像素点的色彩值的获取以及更改

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 获取某个像素位置的值
  8. print img.getpixel((100, 100))
  9.  
  10. # 更改某个像素位置的值
  11. img.putpixel((100, 100), (0, 0, 0))

 

9. 裁剪图片

使用 crop() 方法可以从一幅图像中裁剪指定区域:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 裁剪图片 box为裁剪图片的区域范围
  8. box = (100, 100, 250, 250)
  9. region = img.crop(box)
  10. region.show()

运行输出:

python图像处理---python的图像处理模块Image-

 注意:Python规定左上角为(0, 0)的坐标点,box由一个4元组(左,上,右,下)定义,表示为坐标为: (left, upper, right, lower),最后的两个数字必须比前面两个要大。如图:

python图像处理---python的图像处理模块Image-

 

10. 粘贴图片

为了效果,裁剪该图片的一部分然后旋转,最后粘贴到指定区域:

 
  1. # coding=utf-8
  2. from PIL import Image
  3.  
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6.  
  7. # 裁剪图片 box为裁剪图片的区域范围
  8. box = (100, 100, 250, 250)
  9. region = img.crop(box)
  10. region.show()
  11.  
  12. # 逆时针旋转图片180度
  13. region2 = region.transpose(Image.ROTATE_180)
  14. region2.show()
  15.  
  16. # 图片的粘贴
  17. img.paste(region2, box)
  18. img.show()

运行:

python图像处理---python的图像处理模块Image-

 

 

总结:

如果需要更强大的图像处理操作的话,可以使用Matplotlib类库,它具有比PIL更强大的绘图功能,比如说可以绘制出强大的条形图、饼状图、散点图等。