python-图像处理-PIL

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描述
11位像素,黑和白,存成8位的像素
L8位像素,黑白
P8位像素,使用调色板映射到任何其他模式
RGB3× 8位像素,真彩
RGBA4×8位像素,真彩+透明通道
CMYK4×8位像素,颜色隔离
YCbCr3×8位像素,彩色视频格式
I32位整型像素
F32位浮点型像素


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