Pillow는 Python에서 비교적 기본적인 이미지 처리 라이브러리로 이미지 자르기, 이미지 크기 조정, 이미지 색상 처리 등의 작업에 주로 사용됩니다. Pillow에 비해 OpenCV와 Scikit-image는 더 풍부한 기능을 갖고 있어 사용하기가 더 복잡합니다. 이들은 잘 알려진 "얼굴 인식" 애플리케이션과 같은 머신 비전 및 이미지 분석과 같은 분야에서 주로 사용됩니다.
다양한 형식 지원
Pillow는 "jpeg", "png", "bmp", "gif", "ppm", "tiff"와 같은 다양한 이미지 형식을 지원합니다. ", 등. 동시에 이미지 형식 간의 상호 변환도 지원합니다. 요컨대 Pillow는 거의 모든 형식의 이미지를 처리할 수 있습니다.
풍부한 기능 제공
Pillow는 풍부한 이미지 처리 기능을 제공하며 이는 두 가지 측면으로 요약될 수 있습니다.
썸네일 생성, 미리보기 이미지 생성, 이미지 일괄 처리 등, 이미지 처리에는 이미지 크기 조정, 이미지 자르기, 픽셀 처리, 필터 추가, 이미지 색상 처리 등이 포함됩니다.
이미지 보관
이미지 처리
사용법
pip install pillow 导包 imoprt PIL
guide 패키지
from PIL import Image
open 메소드 사용
im = PIL.Image.open(fp) # 导入图片 im.show() # 展示图片
fp: 이미지 경로 오픈을 이용하세요 method
im = Image.new(mode,size,color) # 创建图片 im.show() # 展示图片로그인 후 복사
매개변수는 다음과 같이 설명됩니다.
mode: 이미지 모드, RGB(트루 컬러 이미지), L(회색조 이미지), CMYK(컬러 맵 인쇄 모드) 등과 같은 문자열 매개변수
- size: 이미지 크기, 튜플 매개변수(너비, 높이)는 이미지의 픽셀 크기를 나타냅니다.
- color: 이미지 색상, 기본값은 0이며 이는 검정색을 의미하며 매개변수 값은 (R, G, B를 지원합니다) ) 삼중항 숫자 형식, 색상의 16진수 값과 색상의 영어 단어
- 1.2 Image mode
1 | |||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
L | |||||||||||||||||||||||||||||||||||||
P | |||||||||||||||||||||||||||||||||||||
RGB | |||||||||||||||||||||||||||||||||||||
RGBA | |||||||||||||||||||||||||||||||||||||
CMYK | |||||||||||||||||||||||||||||||||||||
YCbCr | |||||||||||||||||||||||||||||||||||||
LAB | |||||||||||||||||||||||||||||||||||||
HSV | |||||||||||||||||||||||||||||||||||||
I | |||||||||||||||||||||||||||||||||||||
F | |||||||||||||||||||||||||||||||||||||
Name | Description |
---|---|
ImageFilter.BLUR | 블러 필터링, 즉 필터를 의미합니다 |
ImageFilter.CON TOUR | 컨투어 필터링, 이미지 윤곽선 정보 찾기 |
ImageFilter.DETAIL | 디테일 필터링, 이미지 표시를 더욱 세밀하게 만들기 |
ImageFilter.FIND_EDGES | 경계 필터링 찾기(이미지의 경계 정보 찾기) |
ImageFilter.EMBOSS | 엠보싱 필터, 이미지를 부조 이미지 형식으로 표시 |
ImageFilter.EDGE_ENHANCE | 테두리 향상 필터 |
ImageFilter.EDGE_ENHANCE_MORE | 깊이 가장자리 향상 필터 |
ImageFilter.SMOOTH | 부드러운 필터 |
ImageFilter .SMOOTH_MORE | 심층 스무딩 필터 |
ImageFilter.SHARPEN | 선명 필터 |
ImageFilter.GaussianBlur() | 가우시안 블러 |
ImageFilter.Un SharpMask() | Unsharp Mask Filter |
ImageFilter.Kernel() | Convolution 커널 필터링 |
ImageFilter.MinFilter(size) | Minimum 필터, size 매개변수로 지정된 영역에서 최소 픽셀 값을 선택하여 저장합니다. 출력 이미지 중간으로 이동합니다. |
ImageFilter.MedianFilter(size) | Median 필터는 크기 매개변수로 지정된 영역에서 중앙값 픽셀 값을 선택하여 출력 이미지에 저장합니다. |
ImageFilter.MaxFilter(크기) | 최대 필터 |
ImageFilter.ModeFilter() | 모드 필터링 |
语法:
im_ft = im.filter(filt_mode) # 返回图像对象,里面传入滤波器
实例:
from PIL import Image, ImageFilter im = Image.open(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg") im_ft = im.filter(ImageFilter.EMBOSS) # 添加浮雕滤波器 im_ft.show()
相当于PS里面添加的滤镜
Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,比如 RGB 格式的颜色三元组、十六进制的颜色名称(#ff0000)以及颜色英文单词("red")。同时,它还可以将 CSS(层叠样式表,用来修饰网页)风格的颜色转换为 RGB 格式
在 ImageColor 模块对颜色的大小写并不敏感,比如 "Red" 也可以写为 " red"
ImageColor 支持多种颜色模式的的命名(即使用固定的格式对颜值进行表示),比如我们熟知的 RGB 色彩模式,除此之外,还有 HSL (色调-饱和度-明度)、HSB (又称 HSV,色调-饱和度-亮度)色彩模式。下面对 HSL 做简单介绍:
H:即 Hue 色调,取值范围 0 -360,其中 0 表示“red”,120 表示 “green”,240 表示“blue”
S:即 Saturation 饱和度,代表色彩的纯度,取值 0~100%,其中 0 代表灰色(gry),100% 表示色光最饱和
L:即 Lightness 明度,取值为 0~100%,其中 0 表示“black”黑色,50% 表示正常颜色,100% 则表示白色
亮度和明度的表达方式类似,链接中有具体描述:【https://www.zhihu.com/question/22077462】
ImageColor 模块比较简单,只提供了两个常用方法,分别是 getrgb() 和 getcolor() 函数
语法:
rgb = PIL.ImageColor.getrgb(color) # 得到颜色的 rgb 数值
color参数即可以是英文,也可以是HSL和HSB模式2.3
应用:
from PIL import Image, ImageColor im = Image.new(mode="RGB", size=(100, 100), color=ImageColor.getrgb('HSL(0,100%,50%)')) im.show()
语法:
val = PIL.ImageColor.getcolor(color, mode)
参数:
color:一个颜色名称,字符串格式,可以是颜色的英文单词,或者十六进制颜色名。如果是不支持的颜色,会报 ValueError 错误
mode:指定色彩模式,如果是不支持的模式,会报 KeyError 错误
ImageFont模块定义了相同名称的类,即ImageFont类。这个类的实例存储bitmap字体,用于ImageDraw类的text()方法
PIL使用自己的字体文件格式存储bitmap字体。用户可以使用pilfont工具包将BDF和PCF字体描述器(Xwindow字体格式)转换为这种格式
语法:
ft = PIL.ImageFont.load(font_file)
从指定的文件中加载一种字体 ,返回字体对象
语法:
ft = PIL.ImageFont.load_path(font_file)
和函数load()一样,但是如果没有指定当前路径的话,会从sys.path开始查找指定的字体文件
语法:
ft = PIL.ImageFont.truetype(file, size[, encoding=None])
参数:
file: 加载一个TrueType或者OpenType字体文件
size: 为指定大小的字体创建了字体对象
encoding:字体编码,主要字体编码有: “unic”(Unicode),“symb”(Microsoft Symbol),“ADOB”(Adobe Standard),“ADBE”(Adobe Expert)和“armn”(Apple Roman)
语法:
ft = PIL.ImageFont.load_default()
加载一个默认字体,返回一个字体对象
语法:
size = ft.getsize(text)
返回给定文本的宽度和高度,返回值为2元组
语法:
obj = ft.getmask(text,mode=None) # 为给定的文本返回一个位图。这个位图是PIL内部存储内存的实例
参数:
text :要渲染的文本。
mode:某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串
ImageDraw 模块也是 Pillow 库的主要模块之一,它能给图像化圆弧,画横线,写上文字等
导入:
from PIL import ImageDraw
实例化对象:
from PIL import Image, ImageDraw im = Image.open("./a.jpg") # 创建 image 对象 draw = ImageDraw.Draw(im) # 实例化可以在指定图像上画图的 Draw 对象
Coordinates
绘图接口使用和PIL一样的坐标系统,即(0,0)为左上角。
Colours
为了指定颜色,用户可以使用数字或者元组,对应用户使用函数Image.new或者Image.putpixel。对于模式为“1”,“L”和“I”的图像,使用整数。对于“RGB”图像,使用整数组成的3元组。对于“F”图像,使用整数或者浮点数。
对于调色板图像(模式为“P”),使用整数作为颜色索引。在1.1.4及其以后,用户也可以使用RGB 3元组或者颜色名称。绘制层将自动分配颜色索引,只要用户不绘制多于256种颜色。
Colours Names
A、 十六进制颜色说明符,定义为“#rgb”或者“#rrggbb”。例如,“#ff0000”表示纯红色。
B、 RGB函数,定义为“rgb(red, green, blue)”,变量red、green、blue的取值为[0,255]之间的整数。另外,颜色值也可以为[0%,100%]之间的三个百分比。例如,“rgb(255, 0, 0)”和“rgb(100%, 0%, 0%)”都表示纯红色。
C、 HSL(Hue-Saturation-Lightness)函数,定义为“hsl(hue,saturation%, lightness%)”,变量hue为[0,360]一个角度表示颜色(red=0, green=120, blue=240),变量saturation为[0%,100%]之间的一个值(gray=0%,full color=100%),变量lightness为[0%,100%]之间的一个值(black=0%, normal=50%, white=100%)。例如,“hsl(0,100%, 50%)”为纯红色。
D、 通用HTML颜色名称,ImageDraw模块提供了140个标准颜色名称,Xwindow系统和大多数web浏览器都支持这些颜色。颜色名称对大小写不敏感。例如,“red”和“Red”都表示纯红色。
在PIL 1.1.4及其以后的版本,用户绘制“RGB”图像时,可以使用字符串常量。PIL支持如下字符串格式:
Fonts
PIL可以使用bitmap字体或者OpenType/TrueType字体
语法:
draw.arc(xy, start, end, options)
在给定的区域内,在开始和结束角度之间绘制一条弧
options:可以有什么内容可以在源代码中查看
语法:
draw.bitmap(xy, bitmap, options) # options中可以添加 fill 覆盖的颜色
在给定的区域里绘制变量bitmap所对应的位图,非零部分使用变量options中fill的值来填充。变量bitmap位图应该是一个有效的透明模板(模式为“1”)或者蒙版(模式为“L”或者“RGBA”)
变量xy是变量bitmap对应位图起始的坐标值,而不是一个区域
这个方法与Image.paste(xy, color, bitmap)有相同的功能
语法:
draw.chord(xy, start, end, options)
和方法arc()一样,但是使用直线连接起始点
变量 options 的 outline 给定弦轮廓的颜色;fill 给定弦内部的颜色
语法:
draw.ellipse(xy, options)
在给定的区域绘制一个椭圆形
变量 options 的 outline 给定弦轮廓的颜色;fill 给定弦内部的颜色
语法:
draw.line(xy, options)
在变量xy列表所表示的坐标之间画线
xy里面至少有两个坐标,坐标使用元组表示,存储在一个列表里面[(x1, y1), (x2, y2)]
width指定宽度,fill 指定线的颜色
语法:
draw.pieslice(xy, start, end, options)
和方法arc()一样,但是在指定区域内结束点和中心点之间绘制直线
语法:
draw.point(xy, options)
在指定位置画一个只占一个像素的小点
语法:
draw.polygon(xy, options)
绘制一个多边形
多边形轮廓由给定坐标之间的直线组成,在最后一个坐标和第一个坐标间增加了一条直线,形成多边形
坐标列表是包含2元组[(x,y),…]或者数字[x,y,…]的任何序列对象,它最少包括3个坐标值
变量options的fill给定多边形内部的颜色
语法:
draw.rectangle(xy, options)
绘制一个长边形
变量xy是包含2元组[(x,y),…]或者数字[x,y,…]的任何序列对象,它应该包括2个坐标值
注意:当长方形没有没有被填充时,第二个坐标对定义了一个长方形外面的点
变量options的fill给定长边形内部的颜色
语法:
draw.text(xy, string, options)
在给定的位置绘制一个字符串。变量xy给出了文本的左上角的位置
变量option的 font 用于指定所用字体。它应该是类ImangFont的一个实例,使用ImageFont模块的load()方法从文件中加载的
变量options的fill给定文本的颜色
语法:
draw.textsize(string, options)
返回给定字符串的大小,以像素为单位
变量option的 font 用于指定所用字体。它应该是类ImangFont的一个实例,使用ImageFont模块的load()方法从文件中加载的
from PIL import Image import numpy as np im = Image.open("./a.jpg") print(np.asarray(im)) # 三维数组 na = np.asarray(im) # 将图片转换为数组 na[0][0][0] = 0 # 修改数组的值 im_new = Image.fromarray(na) # 将数组转换为图片
위 내용은 Python 이미지 처리 라이브러리 PIL을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!