python-图像处理-PIL
第三方库为pillow中的PIL
一、安装
pip install pillo
二、常用模块
阅读目录:
一、ImageGrab模块
1、 Grab(抓取屏幕快照)
2、 Grabclipboard(剪贴板的快照)
二、Image模块(对图像进行基础操作的功能基本都包含于此模块内)
1、open(打开图片)
2、show() (显示图片)
3、save(保存图片)
4、format(图像来源)
5、mode(图像的模式)
6、convert(将当前图像转换为其他模式)
7、size(图片尺寸)
8、new(新建图片)
9、crop(复制图片,在复制的图片上做操作,不会影响原有图片)
10、paste(将一张图粘贴到另一张图像上)
11、rotate与transpose(将图片旋转)
12、Filter(返回一个使用给定滤波器处理过的图像的拷贝)
13、Blend(将两张图片重叠)
14、Eval(应用于给定图像中的每个像素)
15、seek(在给定的文件序列中查找指定的帧)
16、Tell(返回当前帧所处位置)
详解
一、ImageGrab模块
1、 Grab(抓取屏幕快照)
定义:ImageGrab.grab()
ImageGrab.grab(bbox)
含义:(New in 1.1.3)抓取当前屏幕的快照,返回一个模式为“RGB”的图像。参数边界框 用于限制只拷贝当前屏幕的一部分区域。
例子:
from PIL import ImageGrab
im =ImageGrab.grab()
im.size
im.mode
im.show()
im0 =ImageGrab.grab((300, 100, 1400, 600))
im0.show()
im0.size
im0.mode
2、 Grabclipboard(剪贴板的快照)
定义:ImageGrab.grabclipboard()
含义:(New in 1.1.4)抓取当前剪贴板的快照,返回一个模式为“RGB”的图像或者文件名称的列表。如果剪贴板不包括图像数据,这个函数返回空。
用户可以使用函数isinstance()来检查该函数返回的是一个有效图像对象或者其他数据。
例子:
from PIL import Image, ImageGrab
im = ImageGrab.grabclipboard()
if isinstance(im, Image.Image):
print "Image: size : %s, mode: %s" % (im.size, im.mode)
im.save("D:\\Document\\mdoc\\python\\pic\\12\\grab_grabclipboard.jpg")
elif im:
for filename in im:
try:
print "filename: %s" % filename
im = Image.open(filename)
except IOError:
pass #ignore this file
else:
print "ImageList: size : %s, mode: %s" % (im.size, im.mode)
else:
print "clipboard is empty."
二、Image模块(对图像进行基础操作的功能基本都包含于此模块内)
1、open类(打开图片)
Image.open(file)
Image.open(file, mode)
2、show() (显示图片)
from PIL import Image ##调用库
im = Image.open("E:\testFile.jpg") ##文件存在的路径
im.show()
3、Save(保存图片)
im.save(outfile,options…)
im.save(outfile, format, options…)
im.save("E:\testFile.png")
4、format(图像来源)
im.format
这个属性标识了图像来源,如果图像不是从文件读取它的值就是None。
5、Mode(图像的模式)
im.mode
常见的mode 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像,表明图像所使用像素格式。如下表为常见的nodes描述:
modes | 描述 |
---|---|
1 | 1位像素,黑和白,存成8位的像素 |
L | 8位像素,黑白 |
P | 8位像素,使用调色板映射到任何其他模式 |
RGB | 3× 8位像素,真彩 |
RGBA | 4×8位像素,真彩+透明通道 |
CMYK | 4×8位像素,颜色隔离 |
YCbCr | 3×8位像素,彩色视频格式 |
I | 32位整型像素 |
F | 32位浮点型像素 |
6、convert(将当前图像转换为其他模式)
im.convert(mode)
new_im = im.convert('P')
7、size(图片尺寸)
8、new(新建图片)
9、Crop(复制图片,在复制的图片上做操作,不会影响原有图片)
im.crop(box)
变量box是一个四元组,定义了左、上、右和下的像素坐标
实例:
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700) ##确定拷贝区域大小
region = im.crop(box)##将im表示的图片对象拷贝到region中大小为box
region.show()
10、Paste(将一张图粘贴到另一张图像上)
im.paste(image,box)
实例:
from PIL import Image
im = Image.open("E:\mywife.jpg")
box=[0,0,100,100]
im_crop = im.crop(box)
print(im_crop.size,im_crop.mode)
im.paste(im_crop, (100,100)) ##(100,100,0,0)
im.paste(im_crop, (400,400,500,500))
im.show()
11、rotate与transpose(将图片旋转)
transpose就是单纯的旋转了图片的方向。
rotate在旋转以后,可能会发生裁剪(一般不推荐)
out = im.resize((128, 128))
out = im.rotate(45) #逆时针旋转 45 度角。
out = im.transpose(Image.FLIP_LEFT_RIGHT) #左右对换。
out = im.transpose(Image.FLIP_TOP_BOTTOM) #上下对换。
out = im.transpose(Image.ROTATE_90) #旋转 90 度角。
out = im.transpose(Image.ROTATE_180) #旋转 180 度角。
12、Filter(返回一个使用给定滤波器处理过的图像的拷贝)
在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:BLUR、CONTOUR、DETAIL、
EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。
其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入。
from PIL import Image
from PIL import ImageFilter ## 调取ImageFilter
imgF = Image.open("E:\testFile.jpg")
bluF = imgF.filter(ImageFilter.BLUR) ##均值滤波
conF = imgF.filter(ImageFilter.CONTOUR) ##找轮廓
edgeF = imgF.filter(ImageFilter.FIND_EDGES) ##边缘检测
imgF.show()
bluF.show()
conF.show()
edgeF.show()
13、Blend(将两张图片重叠)
使用给定的两张图像及透明度,得到一张新的图像。这两张图像必须有一样的尺寸和模式。
from PIL import Image
im1 = Image.open("E:\testFile1.jpg")
im2 = Image.open("E:\testFile2.jpg")
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.blend(im1, im2, 0.2)
im.show()
14、Eval(应用于给定图像中的每个像素)
应用于给定图像中的每个像素。如果图像有多个波段,则对每个波段都应用相同的功能。请注意,该函数会针对每个可能的像素
值进行一次评估,因此您不能使用随机分量或其他生成器。
from PIL import Image
im = Image.open("E:\testFile.jpg")
def fun01(x):
return x*0.3
def fun02(y):
return y*2.0
im1_eval = Image.eval(im, fun01)
im2_eval = Image.eval(im, fun02)
im1_eval.show()
im2_eval.show()
15、seek(在给定的文件序列中查找指定的帧)
在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指
定到第0帧上
from PIL import Image
im_gif = Image.open("E:\testFile.gif")
print(im_gif.mode)
im_gif.show() ##第0帧
im_gif.seek(3)
im_gif.show()
im_gif.seek(9)
im_gif.show()
16、Tell(返回当前帧所处位置)
from PIL import Image
im_gif = Image.open("E:\testFile.gif")
print(im_gif.tell())
im_gif.seek(5)
print(im_gif.tell())
发布于 2022-01-04 12:45