今天,博主正式开始了Python图像处理的学习新征程,各位小伙伴们一起来学习吧!
Python利用图像处理库Pillow(PIL)对图片进行处理。
安装与导入 在Linux系统中,只需要输入pip install Pillow 即可
1.图像读取
首先,我们要打开一张图片
from PIL import Image
im=Image.open('logo.jpg')
im.show() 图片显示
打开图片并不是我们的目的,重要的是我们要获取图片的相关数据
from PIL import Image
im=Image.open('logo.jpg')
print('图像的格式:', im.format)
print('图像的大小:', im.size)
print('图像的宽度:', im.width)
print('图像的高度:', im.height)
print('获取某个像素点的颜色值:', im.getpixel((100,100)))
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')
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相同的图片。 blend 协调混合,将两张图片进行混合
from PIL import Image
im1 = Image.open('logo.jpg').convert(mode='RGB')
im2 = Image.new('RGB', im1.size, 'red')
Image.blend(im1, im2, 0.5).show()
我们可以通过Image.composite(im1, im2, mask)方法实现遮罩混合。三个参数都是Image对象,该方法的作用就是使用mask来混合im1和im2。 注意:im1、im2和mask的大小必须一样 注意r,b,g的生成 split称为拆分图像通道返回值为一个列表对象,对象的元素个数为输入图像的通道数,每个元素为一个二维矩阵,内容为每个通道的数据。如RGB格式的图像,则返回3个元素,每个元素分别对应 R,B,G 三个通道的数据
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
Image.eval(im, func)
补充
像素点
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是完全不透明;
|