在配置完开发环境之后,就可以开始Python的学习之路啦!首先是基础知识的学习,可以根据自己的情况找到合适的教程,我用了一周的时间把慕课网上的Python教程 过了一遍。
过完一遍之后,发现印象不够深刻,所以找一些小的练习来巩固基础。我选择了Python练习册。从今天开始,分享我的练习过程,并且记录其中用到的知识。
Python利用图像处理库Pillow(PIL)对图片进行处理。
在Linux系统中,只需要输入pip install Pillow
即可
Image模块包含了加载、保存图像的方法,还有对图像进行旋转等操作的一些方法。PIL.Image.open(fp,mode=’r’)方法是最基本的打开图像的方法。该方法返回一个Image对象,可以对图像进行其他操作。
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()
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)函数,将图像的颜色反转。
该模块提供了颜色管理方法。
PIL.ImageCms.applyTransform(im, transform, inPlace=0)函数对一个图片应用指定的转换,参数im为指定的图像对象,该图像的mode必须和transform提供的inMode相同,transform是一个CmsTransform对象。inPlace是布尔型参数,如果为True,则在原图修改,不返回值;如果为False,则返回应用转换后的图像对象。
可以利用该模块对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()
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的来探讨技术问题。