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的主要内容,如果未能解决你的问题,请参考以下文章
Polygon zkEVM PIL编译器——pilcom 代码解析