PIL库支持图像存储、显示和处理。几乎支持所有的图片格式 可以完成图像的缩放、裁剪、叠加以及向图像添加线条、图像和文字等操作。
PIL库中包含21个与图片相关的类:
最常用的有: Image,ImageEnhance,ImageFilter
from PIL import Image
在PIL中,任何图像都可以用Image对象表示
方法 | 描述 |
---|---|
Image.open(filename,mode=‘r’) | 根据文件名读取图片 |
Image.new(mode,size color) | 根据给定参数创建一个新图像 |
Image.fromarray(obj, mode=None) | 从array数据创建图像 |
Image.show() | 显示图像 |
Image.save(fp,format=None) | 图像保存(可以完成格式转换) |
Image的属性
属性 | 描述 |
---|---|
Image.format | 图像格式 |
Image.filename | 图像的文件名或路径 |
Image.mode | 图像色彩模式,L为灰度,RGB为真彩 |
Image.size | 图像的宽和高,返回二元元组 |
读取序列图片(gif等):使用seek()和tell()方法
方法 | 描述 | 参数解释 |
---|---|---|
Image.convert(mode) | 图像转换为新的模式 | mode=“L”或“RGB” 或“CMYK.” |
Image.thumbnail(size) | 创建缩略图 | szie-一个元组(长,宽) |
Image.rotate(angle) | 图像旋转 | angel-要旋转的角度 |
Image.resize(size) | 调整图像尺寸 | size-一个元组(长,宽) |
Image.crop(box) | 图像裁剪(ROI) | (left, upper, right, lower)-tuple |
Image.split() Image.merge(mode, bands) |
提取RGB每个颜色通道 合并通道 |
mode-图像色彩模式 band-通道(r,g,b) |
图像处理(Image Processing)是指对图像进行分析、加工、和处理,使其满足视觉、心理或其他要求的技术。
图像滤波采用的是ImageFilter类,通过Image类的filter方法
def filter(self, filter):
"""
Filters this image using the given filter. For a list of
available filters, see the :py:mod:`~PIL.ImageFilter` module.
:param filter: Filter kernel.
:returns: An :py:class:`~PIL.Image.Image` object."""
imobj.filter(ImageFilter.xxx)
常用滤波函数:
方法 | 描述 |
---|---|
ImageFilter.BLUR | 模糊效果 |
ImageFilter.CONTOUR | 轮廓效果 |
ImageFilter.DETAL | 细节效果 |
ImageFilter.EDGE_ENHANCE | 边界加强效果 |
ImageFilter.SMOOTH | 平滑效果 |
ImageFilter.SHARPEN | 图像锐化 |
from PIL import ImageFilter,Image
imobj = Image.open("D:\image.jpg")
imobj.filter(ImageFilter.xxx)
使用 ImageEhance 类,常用的方法有:
方法 | 描述 |
---|---|
ImageEhance.enhance(factor) | 对选择属性的数值增强factor倍 |
ImageEhanceColor(im) | 调整颜色平衡 |
ImageEhance.Contrast(im) | 调整对比度 |
ImageEhance.Brightness(im) | 调整亮度 |
ImageEhance.Sharpness(im) | 调整锐度 |
PIL读取的图片是Image对象,不是Numpy矩阵,两者可以进行转化。
im=Image.open("D:\image.jpg") # 读取一张图片
print(im.shape) # 输出图片的尺寸
im_arr = np.array(im) # 将图片转化为numpy矩阵
print(im_arr.shape) # 输出此时的尺寸
(432,640)
(640,432,3)
注意图片转化为矩阵时,w和h通道会发生改变
读取图片:imread
cv2.imread(filename),读取的图像直接表示ndarray类型的三维矩阵,彩色图片的维度是(h,w,c)
显示图片:imshow
cv2.imshow(window_name,img),需配合cv2.waitKey()才能显示
import cv2
im=cv2.imread("image.jpg")
cv2.imshow("win_image",im)
cv2.waitKey()
im=cv2.imread('image.jpg')
b,g,r=cv2.split(im)
im2=cv2.merge((r,g,b))
cv2.imshow('ImWindow',im2)
cv2.waitKey()
参数: img: 图像对象
code:
cv2.COLOR_RGB2GRAY: RGB转换到灰度模式
cv2.COLOR_RGB2HSV: RGB转换到HSV模式(hue,saturation,Value)
cv2.COLOR_BGR2RGB:RGB通道转换
im=cv2.imread('image.jpg')
gray=cv2.cvtColor(im,COLOR_RGB2GRAY)
cv2.show('gray',gray)
cv2.waitKey()
print(im.shape) # (326,220,3)
im=im.tanspose(2,0,1)
print(im.shape) # (3,326,222)
在深度学习搭建CNN时,往往要做相应的图像数据处理,比如图像要扩展维度,比如扩展成(batch_size,channels,height,width)
im=np.expand_dims(im,axis=0)
print(im.shape) #(1,3,326,220)
参考链接:
http://c.biancheng.net/pillow/picture-format.html
https://www.cnblogs.com/silence-cho/p/10926248.html
https://blog.csdn.net/qq_36941368/article/details/82998296