Python图像,图片处理笔记

1.python3已经用Pillow代替PIL,文件要close,图像要save


2.Image是PIL图像处理中的模块


from PIL import Image

2.1 Image.open()

  from PIL import Image
  	im= Image.open("22.jpg")#当前工作目录相对路径,也可绝对路径
  	im.show() #win的懒操作

2.2 im.save(“223.png”)图像保存

2.3im的基本信息

(1) im.format图像格式
(JPEG)
(2)im.size图像大小
返回(width, height)

(3)im.mode图像模式

mode含义
1黑白1位像素
L黑白8位像素
P调色板映射的8位像素
RGB真彩3*8像素
RGBA真彩透明通道4*8
CMYK颜色隔离4*8
YCbCr色彩视频3*8
I32整型
F32浮点

(4)im.info
返回储存图像的相关数据字典

2.4im.convert()转换

1.p模式im.convert(‘P’,option)
(1)Dither 控制颜色抖动,默认FLOYDSTEINBERG,与邻近的像素一起承担错误。不使用则赋值为NONE。
(2)Palette 控制调色板的产生。默认是WEB,这是标准的216色的“web palette”。要使用优化的调色板,则赋值为ADAPTIVE。
(3)Color:palette为ADAPTIVE时,控制用于调色板的颜色数目。默认是最大值,256种颜色
2.im.convert(mode,matrix)
mode:L或者RGB
matrix:4或者16元组
RGB转化为L的例子:

rgb2xyz = (0.412453,0.357580, 0.180423, 0,
           0.212671,0.715160, 0.072169, 0,
           0.019334,0.119193, 0.950227, 0 )
iim = im.convert("L", rgb2xy)

2.5im.palette:P模式检验

返回ImagePalette的实例或者None

2.6Image.new()产生新图像

Image.new(mode, size,color)
(1)mode模式如RGB、L
(2)size宽高像素二元组
(3)color默认黑色,单通道给一个值,多通道特定元组,可用名字字符"green"、“red”

n_im= Image.new("RGB", (128, 128))#黑色128
n_im= Image.new("RGB", (128, 128),"green")#绿色
n_im= Image.new("RGB", (128, 128), "#FF0000")#红色单通道

2.7 im.copy()返回拷贝图像

2.8 im.crop(box)返回box四元组指定的图像区域,剪切指定区域

box(左,上,右,下)像素为单位

2.9im.paste(image,box)将image粘贴到im的box指定位置上

im.paste(im_crop, (100,100))   #将图像im_crop粘贴到im的(100,100,0,0)的位置上指定左上
im.paste(im_crop, (400,400,500,500))#指定四元组位置,大小必须与im_crop一致

3.0 im.Filter()返回滤波器处理过图像的拷贝,对原来图像没有影响

导入ImageFilter模块并在filter函数中使用
主要有:
BLUR 均值滤波,普通模糊
GaussianBlur 高斯模糊
CONTOUR 找轮廓
DETAIL 细节
EDGE_ENHANCE 边缘增强
EDGE_ENHANCE_MORE 边缘更加增强
EMBOSS 浮雕
FIND_EDGES 边缘检测
SMOOTH_MORE 平滑
SHARPEN 尖锐

from PIL import ImageFilter
im_new=im.filter(ImageFilter.BLUR)#均值滤波
im_new.show()

3.1 image.blend(image1,image2, alpha)返回叠加后的新图像(两张相同尺寸模式)

透明度计算= image1 (1.0 - alpha) + image2*alpha

3.2image.composite(image1,image2, mask)返回复合图像,mask作为透明度

mask图像mode为1、 L、 RGBA

3.3 image.eval(image,function)返回使用function函数处理过每个像素点的图像

def fun(y):
    return y*2.0
im1_eval = Image.eval(im, fun)#对像素点操作,多通道的作用于每一个通道

3.4image.merge()合并类使用一些单通道图像,创建一个新的图像。

变量bands为一个图像的元组或者列表,每个通道的模式由变量mode描述。所有通道必须有相同的尺寸。

3.5im.split()返回三通道参数如:r,g,b = im.split()

3.6im.draft(mode,size)返回新设置的图像

配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本

new_im = im.draft("L", (200,200))

3.7 im.getbands()返回包括每个通道名称的元组。例如,对于RGB图像将返回(“R”,“G”,“B”)

3.8im.getbbox()计算图像非零区域的包围盒。

这个包围盒是一个4元组,定义了左、上、右和下像素坐标。如果图像是空的,这个方法将返回None

3.9 im.getdata()以包含像素值的sequence对象形式返回图像的内容

这个方法返回的sequence对象是PIL内部数据类型,它只支持某些sequence操作,包括迭代和基础sequence访问。使用list(im.getdata()),将它转换为普通的sequence。Sequence对象的每一个元素对应一个像素点的R、G和B三个值。

4.0 im.getextrema()返回最值

返回一个2元组,包括该图像中的最小和最大值。每个二元组代表rgb的最小最大值。

4.1im.getpixel((x,y))返回给定位置的像素

多通道是一个元组,单通道一个值,速度慢,可选择load和getdata

4.2 im.histogram()返回图像的直方图list

这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来(例如,“RGB”图像的直方图有768个值)。二值图像(模式为“1”)当作灰度图像(模式为“L”)处理。

4.3 im.load()返回二维队列为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)提升速度!!!。

方法load()返回一个用于读取修改像素的像素访问对象。这个访问对象像一个二维队列

pix_one=im.load()
print(pix_one[0,2])
pix_one[1,2]=233

比方法getpixel()和putpixel()快很多

4.4 im.paste(colour,box)使用同一种颜色填充变量box对应的区域。本身修改无返回。对于单通道图像,变量colour为单个颜色值;对于多通道,则为一个元组。

im.paste((256,256,0),(0,0,100,100))  ##(256,256,0)表示黄色
im.paste("blue",(0,0,100,100))   ##或者“blue”

im.paste(image,box, mask)
使用变量mask对应的模板图像来填充所对应的区域。可以使用模式为“1”、“L”或者“RGBA”的图像作为模板图像。模板图像的尺寸必须与变量image对应的box图像尺寸一致。

r,g,b =im.split()
im.paste(im_crop, (200,200,300,300), r)

4.5 im.putdata(data) im.putdata(data,scale,offset)

从data序列中填充im的像素值

,默认从(0,0)到(i,0)。
参数使用:pixel = value*scale + offset

4.6 im.resize(size)返回改变尺寸的图像

参数:size二元组(x,y)
filter(滤波器的选择):
1.NEAREST(质量好)、
2.BILINEAR、BICUBIC或者ANTIALIAS(
速度快)
3.忽略时候:图像模式为“1”或者“P”,该变量设置为NEAREST

4.7 im.rotate(angle,filter=NEAREST, expand=0) 返回顺时旋转图像

参数:filter选择同上
expand真值1:图像大可装载旋转后图像,0:旋转图像尺寸不变。

4.8 im.seek(frame)定位到frame帧上图片,默认show()零帧

im.show()    #第0帧图片,im为gif动图
im.seek(3)
im.show()   #第三帧

4.9 im.tell()返回当前的帧数

5.0 im.thumbnail(size, filter)修改原图,使其包含一个自身的缩略图,该缩略图尺寸不大于给定的size。

不想修改记得用copy()
参数filter同上

5.1 im.transform(size, method, data, filter) 返回size大小的新的图像,与原图有相同的模式。

参数:
method
EXTENT(裁剪出一个矩形区域)
AFFINE(仿射变换)
QUAD(将正方形转换为矩形)
MESH(一个操作映射多个正方形)
PERSPECTIVE
filter同上
data指定输入图像中两个坐标点的4元组(x0,y0,x1,y1)

(1)method=EXTENT (比方法crop()稍慢,但是与resize操作一样快):
data四元组
data大小=size 剪裁
data大小>size 缩小剪裁
data大小<size 放大剪裁
(2)method=AFFINE(缩放、转换、旋转和裁剪):
data六元组(a,b,c,d,e,f)
仿射新坐标(x,y)=(ax+by+c, dx+ey+f)
(3)method=QUAD(映射到给定尺寸的长方形):
data八元组分别是左上,左下,右下和右上的坐标
(4)method=PERSPECTIVE(原始图像的2D透视):
data八元组
透视近似新坐标(x,y)= (a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)
注:method的取值代码中应该写image.EXTENT

5.2im.transpose(method)返回翻转或者旋转图像

参数:method:
FLIP_LEFT_RIGHT 左右对换
FLIP_TOP_BOTTOM 上下对换
ROTATE_90 旋转90°
ROTATE_180
ROTATE_270

im.rotate(45)                             #逆时针旋转 45 度
im.transpose(Image.FLIP_LEFT_RIGHT)    

随时更新。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zkFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值