方式1:利用PIL的image函数
利用image读取的图片并不是array格式,其实是图片的类-PIL.JpegImagePlugin.JpegImageFile
需要用 np.asarray(im) 或者 np.array(im)函数将其处理成array格式。这两者的区别其实是深拷贝与浅拷贝的区别。
from PIL import Image
import numpy as np
image = Image.open('./himalaya.jpg')
img = np.array(image)
image.save('save.jpg') 还可以指定图片保存的质量img.save('new1.jpg',quality=95),默认值为75
print("图片的形状",img.shape) #图片的形状 高*宽*通道数 (171, 256, 3)
方式2:利用 OpenCV的Python 接口
cv2.imread() 读出来同样是 array 形式的(高,宽,通道数)
import cv2
#读取图片
img = cv2.imread('./himalaya.jpg')
#读取之后的形状
h,w,c = img.shape
#读取之后图片的显示
cv2.imshow('window_title', img)
cv2.waitKey(5000) #设置图片的延迟时间,否则会一闪而过
#图片的保存
cv2.imwrite('save.jpg',img)
方式3:利用 matplotlib
利用 matplotlib.pyplot as plt 用于显示图片;
利用matplotlib.image as mpimg 用于读取图片,并且读取出来也是 array 格式。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
#读取图片
img = mpimg.imread('./himalaya.jpg')
#图片的形状
print(img.shape)
#图片的显示,但需要后面跟着plt.show()才可以显示出来
plt.imshow(img)
plt.axis('off') #不显示坐标轴
plt.show()
#保存图片
plt.savefig('save.jpg')
方式4:利用Scipy
读出来是 array 形式,并且按照(H,W,C)形式保存。
import scipy.misc
import matplotlib.pyplot as plt
#读取图片
img = scipy.misc.imread('./himalaya.jpg')
#保存图片
scipy.misc.imsave('./himalaya.jpg',img)
#图片显示
plt.imshow(img)
plt.show()
#读取的也是array格式,三通道(H,W,C)
print(img.shape)