Python图像处理

今天,博主正式开始了Python图像处理的学习新征程,各位小伙伴们一起来学习吧!

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

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

1.图像读取

首先,我们要打开一张图片

from PIL import Image #引入模块
im=Image.open('logo.jpg')#文件路径,模式(如RGB,灰度图等),格式如jpg
im.show() 图片显示

打开图片并不是我们的目的,重要的是我们要获取图片的相关数据

from PIL import Image
im=Image.open('logo.jpg')#文件路径,模式(如RGB,灰度图等),格式如jpg
#im.show() 图片显示
print('图像的格式:', im.format)
print('图像的大小:', im.size)
print('图像的宽度:', im.width)
print('图像的高度:', im.height)
# 传入坐标的元组
print('获取某个像素点的颜色值:', im.getpixel((100,100)))

Python图像处理

Python图像处理

2.图像生成

这是我们读取图像,那么接下来我们可以对图像做一些操作,比如生成一个图像:
在Image模块中,提供了创建图像的方法。主要是通过Image.new(mode, size, color)实现,该方法传入三个参数:
mode:图像的创建模式
size:图像的大小
color:图像的颜色

from PIL import Image
# 创建一个简单的图像
im = Image.new('RGB', (100, 100), 'red')
# 保存这个图像
im.save('red.png')

Python图像处理

3.图像混合

那么接下来我们要做的是图像混合

PIL.Image.alpha_composite(im1, im2)
PIL.Image.blend(im1, im2, alpha)
PIL.Image.composite(im1, im2, mask) 

以上3个函数都是将两个图像进行融合,需要注意的是,被融合的两个图像的mode和size都要相同。这里说明一下,alpha是透明度,mask是一个为“1”,“L”或“RGBA”,size和im1,im2相同的图片。
Python图像处理
blend 协调混合,将两张图片进行混合

from PIL import Image
# 打开im1
im1 = Image.open('logo.jpg').convert(mode='RGB')
# 创建一个和im1大小一样的图像
im2 = Image.new('RGB', im1.size, 'red')
# 混合图片,并显示
Image.blend(im1, im2, 0.5).show()  #0.5为透明度,取值是0-1。当透明度为0是,显示im1对象;当透明度为1时,显示im2对象

Python图像处理

我们可以通过Image.composite(im1, im2, mask)方法实现遮罩混合。三个参数都是Image对象,该方法的作用就是使用mask来混合im1和im2。
注意:im1、im2和mask的大小必须一样
Python图像处理
注意r,b,g的生成
split称为拆分图像通道返回值为一个列表对象,对象的元素个数为输入图像的通道数,每个元素为一个二维矩阵,内容为每个通道的数据。如RGB格式的图像,则返回3个元素,每个元素分别对应 R,B,G 三个通道的数据

Python图像处理

4.图像缩放

4.1像素值缩放

Image.eval(image,fun)函数对图像的每个像素进行执行函数。
其中fun可以是一个函数或表达式
该函数传入一个参数,即像素点。该函数会对图片中每个像素点进行函数内的操作。

from PIL import Image, ImageDraw, ImageFont
img1 = Image.open("logo.jpg")
out = Image.eval(img1, lambda i: i * 6)
img1.show()
out.show()

若使用表达式写法

# 定义一个方法
def func(x):
    return x*2
# 对图像im每个像素点进行func中的操作,其中func不能加()
Image.eval(im, func)

Python图像处理

补充

像素点

1、计算机图形的种类从本质上讲,主要有两种计算机图形:一种为位图图像,即是把图像分割成若干个小方格,每个小方格称为一个像素点,由这些像素点排列组成的栅格,.被称为“光栅”,计算机通过表示这些像素点的位置、颜色、亮度等信息,从而表示出整幅图像。

2、数字图像将图像分割成非常细小的点,称为像素点,像素点的值表示该点图像的亮度.但是,近年来的研究指出,利用光合(A)与蒸腾(E)之比获得的水分利用效率(WUE=AE),通常称为瞬时水分利用效率(WUEi),与δ13C不呈现显著的正相关关系。

3、像素点是显示器显示画面的最小发光单位,由红、绿、蓝三个像素单元组成,在彩色显像管中,电子枪通常有三支排列成三角形的单色电子枪组成,称为△(delta)配置,而显示器的荧光层也采用三位一体的荧光体,即含有红色、绿色、蓝色荧光体,它们的排列方式和电子枪的排列方式相同,这三种基色通过不同的亮度组合即可产生各种颜色。

4、屏幕中的像素点越多,画面的分辨率越高,图像就越细腻逼真。

像素也叫分辨率,是指可以显示出的水平和垂直像素的数组,其值通常与若干显示方式相对应。分辨率为1366×768时,就是指在等离子屏幕的横向上 划分了1366 个像素点,竖向上划分了 768 个像素点。分辨率越高,则可接收分辨率的范围越大,则等离子的信号接收范围越广。

图像的深度

图像中像素点占得bit位数,就是图像的深度,比如:

二值图像:图像的像素点不是0 就是1 (图像不是黑色就是白色),图像像素点占的位数就是 1 位,图像的深度就是1,也称作位图。

灰度图像:图像的像素点位于0-255之间,(0:全黑,255代表:全白,在0-255之间插入了255个等级的灰度)。2^8=255,图像的深度是8。
依次轮推,我们把计算机中存储单个像素点所用的 bit 位称为图像的深度。

通道的概念

单通道:也就是通常所说的灰度图,每个像素点只有一个值表示,如果图像的深度是4位(256 =222*2),那么他的像素值0(黑)~255(白);

三通道:也就是通过见到的彩色图,每个像素点有三个值表示,如果图像深度是4位(256 = 222*2),那么他的像素值有红(0-255)、绿(0-255)、蓝(0-255)叠加表示,色彩更加艳丽;

四通道:也就是在三通道图像基础上加上透明程度,Alpha色彩空间,如果图像深度是4位(256 = 222*2),那么0是完全透明,255是完全不透明;

上一篇:某 IM 软件消息卡片异常分析


下一篇:JS 第三课