python—PIL图像操作(一)

目录

打开和新建图像文件

打开图像

新建图像

混合

透明度混合

遮罩混合

复制和缩放

复制图像

縮放像素(按像素缩放)

缩放图像(按尺寸大小缩放)

粘贴和裁剪

裁剪

粘贴

图像旋转

格式转换

covert()

transpose()

分离和合并

Image库其他内置函数


打开和新建图像文件

通过使用Image模块,可以从文件中加载图像,或者处理其他图像,或者从scratch中创建图像。在对图像进行处理时,首先需要打开要处理的图片。在Image模块中使用函数open()打开一副图片,执行后返回Image类的实例。当文件不存在时,会引发IOError错误。

打开图像

打开图像使用函数open()语法格式:open(fp,mode)

  • fp:打开文件的路径
  • mode:可选参数,表示打开文件的方式,通常使用默认值r
from PIL import Image

img1 = Image.open('./poo/1.jpg')  # 打开图片

img1.show()  # 显示图片

print('图片格式:', img1.format)
print('图片大小:', img1.size)
print('图片宽度:', img1.width)
print('图片高度:', img1.height)
print('获取指定位置的像素:', img1.getpixel((200, 260)))  # 参数为坐标点的元组,返回结果为一个RGB值元组

新建图像

new(mode,size,color =0)

  • mode:图片模式
  • size:图片尺寸,使用宽和高两个元素构成的元组
  • color:默认颜色(黑色)
img2 = Image.new(mode='RGB', size=(img1.size), color='yellow')  # 创建一个与img1同样大小的图片

python—PIL图像操作(一)_第1张图片

混合

透明度混合

使用函数blend()实现透明度混合处理。语法格式:blend(im1,im2,alpha)

  • im1、im2:参与混合的图片1和图片2
  • alpha:混合透明度,取值是0-1

通过使用函数blend()可以将im1和im2这两幅图片(尺寸相同)以一定的透明度进行混合。具体混合过程:(im1*(1-alpha)+ im2*alpha)。当混合透明度为0时,显示im1原图。当混合透明度alpha取值为1时,显示im2 原图片。

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img2 = Image.new(mode='RGB', size=(img1.size), color='yellow')  # 创建一个与img1同样大小的图片
Image.blend(img1, img2, .3).show()  # 透明度混合处理

遮罩混合

使用函数composite()实现遮罩混合处理。语法格式:composite(im1,im2,mask)

  • iml、im2:混合处理的图片1和图片2
  • mask:也是一个图像
  • mode:可以为“1”,“L"或“RGBA”,并且大小要和im1、im2一样

函数composite()的功能是使用mask来混合图片im1和im2,并且要求mask、im1和im2三幅图片的尺寸相同。

from PIL import Image
im1 = Image.open('./poo/1.jpg')
im2 = Image.open('./poo/2.jpg')
im2.resize(im1.size)  # 将im2的图片大小修改成与im1相同
r, g, b = im2.split()  # 将im2的图片rgb通道切割
Image.composite(im1, im2, g).show()  # 用im2中的g通道对im1进行遮罩

复制和缩放

复制图像

使用函数Image.copy()复制指定的图片,可以用于在处理或粘贴时需要持有源图片

縮放像素(按像素缩放)

使用函数eval()实现像素缩放处理,能够使用函数fun()计算输入图片的每个像素并返回。使用函数eval()语法格式:eval(image,fun)。其中image表示输入的图片,fun()表示给输入图片的每个像素应用此函数,fun()函数只允许接收一个整型参数。如果一个图片含有多个通道,则每个通道都会应用这个函数。

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
Image.eval(img1, lambda i: i * 0.5).show()  # 按照像素缩放,可以达到增加或减少曝光的效果

缩放图像(按尺寸大小缩放)

使用函数thumbnail()原生地缩放指定的图像,语法格式:Image.thumbnalsizeresample-3)

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img1.thumbnail(size=(500, 300))  # 按照尺寸大小缩放
img1.show()

粘贴和裁剪

裁剪

使用函数crop()可以剪切图片中box所指定的区域, 语法:img.crop(box = None)

参数box是一个四个值得元组,分别定义了剪切区域的左、上、右下4个坐标。

im1 = Image.open('./poo/5.jpg')
im_crop = im1.crop((50, 50, 500, 300))  # 裁剪
im_crop.show()

粘贴

使用函数paste()可以粘贴源图像或像素至该图像中。

语法格式:Image.paste(im,box=Nonemask=None),其中im是源图或像素值; box 是粘贴的区域; mask 是遮罩。参数box可以分为以下3中情况。

1. (x1y1) :将源图像左上角对齐(x1,y1)点,其余超出被粘贴图像的区域被抛弃。

2. (x1,y1,x2,y2) :源图像与此区域必须一致。

3.None:源图像与被粘贴的图像大小必须一致。

im1 = Image.open('./poo/5.jpg')
im2 = Image.open('./poo/6.jpg')
im_crop = im1.crop((50, 50, 500, 300))  # 裁剪
im2.paste(im_crop, (10, 20))  # 图片黏贴
im2.show()

图像旋转

使用函数rotate()可以返回此图像的副本,围绕其中心逆时针旋转给定的度数Image.rotate()

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img1.rotate(90).show()  # 图片的旋转

格式转换

covert()

使用函数convert()返回模式转换后的图像实例。

convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256)

  • mode:转换文件的模式,模式有“L”、“RGB”“CMYK”;
  • matrix:旋转使用的矩阵;
  • dither:取值为None切转为黑白图时非0 (1-255)像素均为白,也可以设置此参数为FLOYDSTEINBERG。
from PIL import Image
img1 = Image.open('./poo/1.jpg')
img1.convert('L').show()

transpose()

函数transpose()实现图像格式的转换。Image. transpose(method)

转换图像后,返回转换后的图像,“method” 的取值有以下几个。

  1.  PIL.Image.FLIP_LEFT_RIGHT:左右镜像
  2.  PIL.Image.FLIP_TOP_BOTTOM :上下镜像
  3.  PIL.Image.ROTATE_90:旋转90
  4.  PlL.Image.ROTATE_180: 旋转180
  5.  PIL.Image.ROTATE_270: 旋转270
  6.  PIL.Image.TRANSPOSE :颠倒顺序
from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img1.transpose(Image.FLIP_LEFT_RIGHT).show()  # 左右镜像
img1.transpose(Image.FLIP_TOP_BOTTOM).show()  # 上下镜像
img1.transpose(Image.ROTATE_90).show()  # 旋转90度

分离和合并

分离:使用函数split()可以将图片分割为多个通道列表。

合并:使用函数merge()可以将一个通道的图像合并到更多通道图像中。语法格式如下所示:

Image.merge(mode,bands),其中mode指输出图像的模式,bands波段通道,一个序列包含单个带图通道。

from PIL import Image

img1 = Image.open('./poo/1.jpg') 
img2 = Image.open('./poo/2.jpg')
img2 = img2.resize(img1.size)
r1, g1, b1 = img1.split()
r2, g2, b2 = img2.split()
img = Image.merge('RGB',(r2,g1,b2))
img.show()

Image库其他内置函数

常用的属性

  1. Imageformat: 源图像格式
  2. Image.mode:图像模式字符串
  3. Image.size:图像尺寸

常用的内置函数

  1. Image.getbands(): 获取图像每个通道的名称列表,例如RGB图像返回['R'G';B']。
  2. Image.getextrema():获取图像最大、最小像素的值。
  3. Image.getpixel(xy):获取像素 点值。
  4. Image.histogram(mask=None,extrema=None):获取图像直方图,返回像素计数的列表。
  5. Image.point(function):使用函數修改图像的每个像素。
  6. Image.putalpha(alpha):添加或替换图像的alpha层。
  7. Image.save(fp,format=None,**params):保存图片。
  8. Image.show(title=None,command=None): 显示图片。
  9. Image.transform(size ,method,data=None,resample=0.fill= 1):变换图像。
  10. Image.verify():校验文件是否损坏。
  11. Image.close():关闭文件。

你可能感兴趣的:(图像处理,python,开发语言,后端)