python图像处理 (二).PIL图像处理库学习②

我不是女神ヾ 2022-01-21 06:31 643阅读 0赞

实验环境:windows10,pyCharm

本文在如下博文的基础上进行:

python图像处理 (一).PIL图像处理库学习①

1、自定义创建图片

PIL除了可以从文件中打开一张图片,我们也可以创建一张图片

  1. Image.new(mode,size) image
  2. Image.new(mode, size,color) image

创建具有给定模式和大小的新图像。Size以(宽、高)-元组的形式给出,单位为像素。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值),如果省略颜色参数,则图像将填充0(这通常对应于黑色)。如果颜色为None,则不初始化图像。如果你要在图像中粘贴或绘制东西,这是很有用的。

如下创建了一张三通道大小为255*255的红色图像:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.new("RGB", (128, 128), "red") #新建图像
  3. im.show()

显示效果如下:

20190609152317621.PNG

2、复制图像

  1. im.crop(box) image

复制图像。如果您希望将内容粘贴到图像中,但仍保留原始内容,请使用此方法。

如下返回的和原图一样的:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.new("RGB", (225, 225), "red") #新建图像
  3. new_im = im.copy() #复制图像

3、裁剪图像

  1. im.crop(box) image

从当前图像返回矩形区域的副本。box是一个定义左、上、右和下像素坐标的4元组。
这是一个延迟操作。对源图像的更改可以反映在裁剪后的图像中,也可以不反映在裁剪后的图像中。要获得单独的副本,请调用裁剪副本上的load方法。

代码如下:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png")
  3. im.show() #显示原图
  4. box = (100,100,300,300) #裁剪区域
  5. new_im = im.crop(box) #裁剪图片
  6. new_im.show() #显示裁剪区域

效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_7020190609164504680.PNG

4、粘贴图像

  1. im.paste(image, box)

将另一个图像粘贴到此图像中。box参数要么是一个给出左上角的2元组,要么是一个定义左、上、右和下像素坐标的4元组,要么没有(与(0,0)相同)。如果给定一个4元组,则粘贴图像的大小必须与区域的大小匹配。
如果模式不匹配,则将粘贴的图像转换为此图像的模式

如下打开一张图像然后在图像上粘贴一个自己创建的图像:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im1 = Image.open("images/mm.png")
  3. box = (100,100,300,300) #粘贴区域
  4. im2 = Image.new('RGB',(200,200),'red') #创建一张图像
  5. im1.paste(im2,box) #在box区域粘贴im2图像
  6. im1.show()

效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 1

使用:im1.paste(‘red’,box) 和上面效果相同

5、滤波器

  1. im.filter(filter) image

返回由给定过滤器过滤的图像的副本。有关可用过滤器的列表,请参见下表。
















































filtes

描述
BLUR 模糊滤镜
CONTOUR 轮廓滤镜
DETAIL 细节滤镜
EDGE_ENHANCE 边界增强滤镜
EDGE_ENHANCE_MORE 边界增强加强版滤镜
 EMBOSS 浮雕滤镜
FUND_EDGES 寻找边界滤镜
SMOOTH 平滑滤镜
SOOTH_MORE 平滑滤镜加强版
SHARPEN 锐化滤镜

如下举个小列子:

  1. from PIL import Image #导入PIL库中的Image模块
  2. from PIL import ImageFilter #导入PIL库中的ImageFilter模块
  3. im = Image.open("images/mm.png").resize((255,255))
  4. im.show()
  5. BLUR_im = im.filter(ImageFilter.BLUR)
  6. CONTOUR_im = im.filter(ImageFilter.CONTOUR)
  7. DETAIL_im = im.filter(ImageFilter.DETAIL)
  8. EMBOSS_im = im.filter(ImageFilter.EMBOSS)
  9. DETAIL_im.show()
  10. EMBOSS_im.show()
  11. BLUR_im.show()
  12. CONTOUR_im.show()

效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 2watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 3watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 4watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 5watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 6

剩下的自己试下。

6、混合图像

  1. Image.blend(image1, image2, alpha) image

使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。混合公式如下:

  1. 混合公式为:out = image1 (1.0 - alpha) + image2 alpha

若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值无限制。

例子如下:

  1. from PIL import Image #导入PIL库中的Image模块
  2. from PIL import ImageFilter #导入PIL库中的ImageFilter模块
  3. im1 = Image.open("images/mm.png").resize((255,255)).convert('RGB') #为了和图像2的大小和模式一样重置大小和模式
  4. im2 = Image.open("images/rb.jpg").resize((255,255)) ##为了和图像1的大小和模式一样重置大小和模式
  5. #im1和im2按照第一张60%的透明度,第二张40%的透明度,合成为一张。
  6. new_im = Image.blend(im1,im2,0.6) #混合图像
  7. new_im.show()

效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 7

7、分离图像

  1. im.split() sequence

返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)

测试代码如下:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png").resize((128,128)).convert('RGB')
  3. r,g,b = im.split()
  4. r.show()
  5. g.show()
  6. b.show()

效果如下:

20190609181604135.PNG20190609181619809.PNG20190609181634888.PNG

差别不是很大,但还是有差别的。

发表评论

表情:
评论列表 (有 0 条评论,643人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PIL图像处理-值化

    时隔很久才知道原来这种对图像的处理方式叫做二值化!什么是二值化呢?就是把一张图的像素点编程0或255,完全的白或黑。 比如这么一张32\32的小图片(当然他已经是黑白的了)