Python学习笔记(1):图片处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/K_Ohaha/article/details/78838134

基础学习

在配置完开发环境之后,就可以开始Python的学习之路啦!首先是基础知识的学习,可以根据自己的情况找到合适的教程,我用了一周的时间把慕课网上的Python教程 过了一遍。
过完一遍之后,发现印象不够深刻,所以找一些小的练习来巩固基础。我选择了Python练习册。从今天开始,分享我的练习过程,并且记录其中用到的知识。

图片处理

Python利用图像处理库Pillow(PIL)对图片进行处理。

安装与导入

在Linux系统中,只需要输入pip install Pillow即可

需要注意的是:

  • 1.0版本以后,不再支持“import Image”,需要使用“from PIL import Image”;
  • 2.1.0版本以后,不再支持“import _imaging”,需要使用“from PIL.Image import core as _imaging”

Pillow与Python对应的版本

  • Pillow版本小于2.0.0支持Python 2.4,2.5,2.6,2.7
  • Pillow版本大于2.0.0(包括2.0.0)小于4.0.0支持Python 2.6,2.7,3.2,3.3,3.4,3.5
  • Pillow版本大于4.0.0(包括4.0.0)支持Python 2.7,3.3,3.4,3.5,3.6

模块

Image

Image模块包含了加载、保存图像的方法,还有对图像进行旋转等操作的一些方法。PIL.Image.open(fp,mode=’r’)方法是最基本的打开图像的方法。该方法返回一个Image对象,可以对图像进行其他操作。

图像处理

  • PIL.Image.alpha_composite(im1, im2)
  • PIL.Image.blend(im1, im2, alpha)
  • PIL.Image.composite(im1, im2, mask)
    以上3个函数都是将两个图像进行融合,需要注意的是,被融合的两个图像的mode(了解mode)和size都要相同。这里说明一下,alpha是透明度,mask是一个为“1”,“L”或“RGBA”,size和im1,im2相同的图片。
blend函数示例
from PIL import Image, ImageDraw, ImageFont

img1 = Image.open("cat.jpg")
img2 = Image.new("RGB", (620, 423), "blue")
out = Image.blend(img1, img2, 0.4)
out.show()

运行结果:
这里写图片描述

PIL.Image.eval(image, *args)函数对图像的每个像素进行执行函数。

from PIL import Image, ImageDraw, ImageFont

img1 = Image.open("rab.jpg")
out = Image.eval(img1, lambda i: i * 2)
img1.show()
out.show()

运行结果:
这里写图片描述
以上是对每个像素值乘以2的结果。

ImageChops

Chops其实是Channel Operations,也就是对通道的操作。下面来看一下ImageChops模块提供的一些方法:
PIL.ImageChops.add(image1, image2, scale=1.0, offset=0)
add方法的操作是out = ((image1 + image2) / scale + offset),所以scale越大,颜色越深,offset越大,颜色越浅。默认情况下,scale为1,offset为0。

img1 = Image.open("cat.jpg")
img2 = Image.new("RGB", (620, 423), "blue")
# img3 = ImageChops.add(img1, img2, 10, 0)
img3 = ImageChops.add(img1, img2, 1, 200)
img3.show()

当scale等于10,offset等于0时,效果图:
这里写图片描述
当scale等于1,offset等于200时,效果图:
这里写图片描述
有了上面的例子,就可以更好的理解ImageChops.add()函数的用法了。
PIL.ImageChops.blend(image1, image2, alpha)函数和Image模块中的blend函数相同。
PIL.ImageChops.darker(image1, image2)函数是将两个图片逐个像素比较,返回灰度值较大的像素。例如:

img1 = Image.open("cat.jpg")
img2 = Image.new("RGB", (620, 423), "blue")
img3 = ImageChops.darker(img1, img2)
img3.show()

结果
这里写图片描述
PIL.ImageChops.invert(image)函数,将图像的颜色反转。
这里写图片描述

ImageCms

该模块提供了颜色管理方法。
PIL.ImageCms.applyTransform(im, transform, inPlace=0)函数对一个图片应用指定的转换,参数im为指定的图像对象,该图像的mode必须和transform提供的inMode相同,transform是一个CmsTransform对象。inPlace是布尔型参数,如果为True,则在原图修改,不返回值;如果为False,则返回应用转换后的图像对象。

在以下情况下,该方法会抛出PyCMSError异常:
  • im.mode != transform.inMode
  • inPlace == TRUE and transform.inMode != transform.outMode
  • pyCMSdll不支持im.mode, transfer.inMode, 或 transfer.outMode
  • 转换过程中发生错误

ImageDraw

可以利用该模块对2D图像进行创建和修改操作。
字体:PIL可以使用bitmap fonts or OpenType/TrueType fonts。class PIL.ImageDraw.Draw(im, mode=None)函数用来创建一个可以被修改的图像,针对图像的修改会在原图上进行。
PIL.ImageDraw.ImageDraw.bitmap(xy, bitmap, fill=None)函数在指定区域绘制指定的位图

cat = Image.open("cat.jpg")
rab = Image.open("rab.jpg")
d = ImageDraw.Draw(cat)
rab = rab.resize((100, 100), Image.ANTIALIAS)
r,g,b = rab.split()
d.bitmap((0, 0), r, fill=(0, 0, 0))
cat.show()

结果
这里写图片描述

其他函数
  • PIL.ImageDraw.ImageDraw.ellipse(xy, fill=None, outline=None)函数用来绘制椭圆形。
  • PIL.ImageDraw.ImageDraw.pieslice(xy, start, end, fill=None, outline=None)函数用来扇形
  • PIL.ImageDraw.ImageDraw.polygon(xy, fill=None, outline=None)函数用来绘制多边形,xy给定每个顶点的坐标
  • PIL.ImageDraw.ImageDraw.rectangle(xy, fill=None, outline=None)用来绘制矩形
  • PIL.ImageDraw.ImageDraw.text(xy, text, fill=None, font=None, anchor=None, spacing=0, align=”left”, direction=None, features=None)函数用来绘制字符

ImageEnhance

ImageEnhance提供了一些类,可以用于图像增强。所有的增强类都实现了一个接口,这个接口包括一个方法enhancer.enhance(factor)。该方法返回增强过的图像。factor为1时,返回原图像拷贝,factor越大,增强效果越显著。
示例如下:

dog = Image.open("/home/jackeyzhe/Downloads/dog.jpg")
enhancer = ImageEnhance.Sharpness(dog)
enhancer.enhance(0.0).show("Sharpness %f" % 0.0)
enhancer.enhance(10.0).show("Sharpness %f" % 10.0)

factor为0时
这里写图片描述
factor为10时
这里写图片描述
class PIL.ImageEnhance.Color(image)函数对颜色进行增强
同样的,factor为1.0为原图。当factor为0.0时为黑白图像。

dog = Image.open("/home/jackeyzhe/Downloads/dog.jpg")
ImageEnhance.Color(dog).enhance(0.0).show()
ImageEnhance.Color(dog).enhance(2.0).show()

factor为0时
这里写图片描述
factor为2.0时
这里写图片描述
class PIL.ImageEnhance.Contrast(image)函数用来调整对比度
class PIL.ImageEnhance.Brightness(image)函数用来调整亮度
class PIL.ImageEnhance.Sharpness(image)函数用来调整锐度

关于Python图像处理技术就先介绍这些,如果想了解更多可以自行查看Pillow的文档,也欢迎各位正在学习Python的来探讨技术问题。

猜你喜欢

转载自blog.csdn.net/K_Ohaha/article/details/78838134