小言_互联网的博客

Python图像处理模块Pillow

475人阅读  评论(0)

PIL:Python Imaging Library,Python平台的图像处理标准库。

1)使用 Image 类

# PIL.Image.open(fp, mode='r')
from PIL import Image
im  = Image.open('pic.jpg')
print(im)
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=640x640 at 0xC32668>

加载成功后,将返回一个Image对象,可以通过使用示例属性查看文件内容:
"""
print(im.format,im.size,im.mode)
# JPEG (640, 640) RGB
im.show()
# 会调用默认的图片打开方式打开文件

format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。
size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。
mode 属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
如果文件打开错误,返回 IOError 错误。

2)读写图像

# 加载文件,并转化为png格式:
# Image.save(fp, format=None, **params)[source]
from PIL import Image
import os

infile = 'pic.jpg'
f, e = os.path.splitext(infile)  # os.path.splitext()将文件名和扩展名分开
outfile = f + ".png"
if infile != outfile:
    try:
        Image.open(infile).save(outfile)
    except IOError:
        print("Cannot convert", infile)

3)图像的剪切、粘贴与合并操作

"""
Image.crop(box=None)
参数:	box – The crop rectangle, as a (left, upper, right, lower)-tuple.即左上和右下的坐标
返回类型:	Image
返回:	An Image object.
"""
im  = Image.open('pic.jpg')
box = (100,100,300,300)
region = im.crop(box)
print(region.size) # (200, 200)

region = region.transpose(Image.ROTATE_180)
box = (200,200,400,400)
im.paste(region,box) # 粘贴内容和选择区域尺寸必须一样
# im.show()

4)分离和合并颜色通道

r,g,b = im.split()  # 对于图像对象的执行split()函数,如果是单通道的,则返回其本身,否则,返回各个通道。
im = Image.merge('RGB',(r,g,b))
# im.show()

5)几何变换

out= im.resize((128,128))
out = im.rotate(45)  # 逆时针方向

7)颜色空间变换

在处理图像时,根据需要进行颜色空间的转换:

cmyk = im.convert("CMYK")
gray = im.convert("L")

8)图像滤波

图像滤波在ImageFilter 模块中,在该模块中,预先定义了很多增强滤波器,
可以通过filter( )函数使用,预定义滤波器包括:
BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。
其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,

from PIL import  ImageFilter
imgF = Image.open("pic.jpg")
outF = imgF.filter(ImageFilter.DETAIL)   # 细节滤波
conF = imgF.filter(ImageFilter.CONTOUR)  # 轮廓滤波
edgeF = imgF.filter(ImageFilter.FIND_EDGES)  # 边界增强滤波
imgF.show()
outF.show()
conF.show()
edgeF.show()

具体滤波函数及实例可参考:
Python图像处理之Pillow–ImageFilter
ImageFilter Module


转载:https://blog.csdn.net/qq_27921205/article/details/102255273
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场