python PIL(pillow)图像库的一些基础操作

from PIL import Image
import numpy as np

#PILPython Image Library,也即我们所称的Pillow,比opencv更轻巧

#图像读写:PIL读入的是一个对象,而不是numpy矩阵
img = Image.open('figures/img_1.jpg')
print(img.format)    #图片的压缩格式  -----> JPEG
print(img.size)      #省略了通道(w, h)维度的排序也不一样 ------>(854, 480)
print(img.mode)      #RGB模式,与opencv读入的格式(BGR)不同    -----> RGB
img.show()           #显示图像

#灰度图像的获取
#对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()
# 函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是
# BMP,或者JPG,打开后,其模式为“L”
gray = Image.open('figures/img_1.jpg').convert('L')
gray.show()

#读取不到图片会抛出异常IOError,我们可以捕捉它,做异常处理
try:
    img2 = Image.open('figures/img_2.jpg')
except IOError:
    print('Fail to load image!')

#pillow读进来的图片不是矩阵,将图片转矩阵:
arr = np.array(img)
print(arr.shape)    #输出矩阵的维度 -------> (480, 854, 3)
print(arr.dtype)    #数值类型  --------> unit8
print(arr)          #数组


#存储图片
#矩阵转为图片
new_img = Image.fromarray(arr)
new_img.save('img_3.png')

#图像操作:
#分离合并通道
r, g, b = img.split()
img = Image.merge("RGB", (b, g, r))

#复制图片
img_4 = img.copy()

#ROI获取
img_5 = Image.open('figures/img_1.jpg')
roi = img_5.crop((0, 0, 300, 300))      #(左上x,左上y,右下x,右下y)坐标
roi.show()



猜你喜欢

转载自blog.csdn.net/alawaka2018/article/details/80374324