PIL

Posted 执剑长老

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIL相关的知识,希望对你有一定的参考价值。

 

1、颜色与RGBA值

计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值。在Pillow中,RGBA的值表示为由4个整数组成的元组,分别是R、G、B、A。整数的范围0~255。RGB全0就可以表示黑色,全255代表黑色。可以猜测(255, 0, 0, 255)代表红色,因为R分量最大,G、B分量为0,所以呈现出来是红色。但是当alpha值为0时,无论是什么颜色,该颜色都不可见,可以理解为透明。

2、图像的坐标

图像中左上角是坐标原点(0, 0),这和平常数学里的坐标系不太一样。这样定义的坐标系意味着,X轴是从左到右增长的,而Y轴是从上到下增长。

在Pillow中如何使用上述定义的坐标系表示一块矩形区域?许多函数或方法要求提供一个矩形元组参数。元组参数包含四个值,分别代表矩形四条边的距离X轴或者Y轴的距离。顺序是(左,顶,右,底)。右和底坐标稍微特殊,表示直到但不包括。可以理解为[左, 右)[顶, 底)这样左闭右开的区间。比如(3, 2, 8, 9)就表示了横坐标范围[3, 7];纵坐标范围[2, 8]的矩形区域。

3、图像操作

 

4、滤波

ImageFilter类中预定义了如下滤波方法:

? BLUR:模糊滤波

? CONTOUR:轮廓滤波

? DETAIL:细节滤波

? EDGE_ENHANCE:边界增强滤波

? EDGE_ENHANCE_MORE:边界增强滤波(程度更深)

? EMBOSS:浮雕滤波

? FIND_EDGES:寻找边界滤波

? SMOOTH:平滑滤波

? SMOOTH_MORE:平滑滤波(程度更深)

? SHARPEN:锐化滤波

? GaussianBlur(radius=2):高斯模糊

>radius指定平滑半径。

? UnsharpMask(radius=2, percent=150, threshold=3):反锐化掩码滤波

>radius指定模糊半径;

>percent指定反锐化强度(百分比);

>threshold控制被锐化的最小亮度变化。

? Kernel(size, kernel, scale=None, offset=0):核滤波

当前版本只支持核大小为3x3和5x5的核大小,且图像格式为“L”和“RGB”的图像。

>size指定核大小(width, height);

>kernel指定核权值的序列;

>scale指定缩放因子;

>offset指定偏移量,如果使用,则将该值加到缩放后的结果上。

? RankFilter(size, rank):排序滤波

>size指定滤波核的大小;

>rank指定选取排在第rank位的像素,若大小为0,则为最小值滤波;若大小为size * size / 2则为中值滤波;若大小为size * size - 1则为最大值滤波。

? MedianFilter(size=3):中值滤波

>size指定核的大小

? MinFilter(size=3):最小值滤波器

>size指定核的大小

MaxFilter(size=3):最大值滤波器

>size指定核的大小

? ModeFilter(size=3):波形滤波器

选取核内出现频次最高的像素值作为该点像素值,仅出现一次或两次的像素将被忽略,若没有像素出现两次以上,则保留原像素值。

>size指定核的大小

例:

img_blur = img.filter(ImageFilter.BLUR)

 

 

5、注意事项

save()可保存处理后的图片,如果未经处理,保存后的图像占用的空间(字节数)一般也与原图像不一样,可能经过了压缩。

 

以上是关于PIL的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中将图像分割成多个片段

Polygon zkEVM PIL编译器——pilcom 代码解析

python通过pil模块对图片格式进行转换的代码

Polygon zkEVM的pil-stark Fibonacci状态机代码解析

为啥这种红色只填充一帧 PIL?

纯代码系列:Python实现验证码图片(PIL库经典用法用法,爬虫12306思路)