方法一:利用 PIL 中的 Image 函数
这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array(im)函数将其处理成array格式。
区别:np.array() 是深拷贝,np.asarray() 是浅拷贝。浅拷贝只拷贝父对象,不会拷贝对象的内部的子对象;深拷贝会拷贝对象及其子对象。
1 from PIL import Image 2 import numpy as np 3 4 #读取 5 image = Image.open('fur.jpg') 6 #显示 7 image.show() 8 #保存 9 image.save('new.jpg') 10 #转换成array 11 im_array = np.array(image) 12 print(im_array.shape) 13 #array转换成image 14 img = Image.fromarray(np.uint8(im_array)) 15 img.save('new1.jpg') #还可以指定图片质量img.save('new1.jpg',quality=95),默认值为75
方法二:利用 matplotlib
利用 matplotlib.pyplot as plt 用于显示图片;利用matplotlib.image as mpimg 用于读取图片,并且读取出来就是 array 格式。
1 import matplotlib.pyplot as plt 2 import matplotlib.image as mpimg 3 import numpy as np 4 5 img = mpimg.imread('fur.jpg') 6 print(img.shape) 7 plt.imshow(img) #该函数负责对图像进行处理,并显示其格式,但不能显示,其后跟着plt.show()才能显示出来 8 plt.axis('off') #不显示坐标轴 9 plt.show() 10 plt.savefig('new.jpg')
方法三:利用 OpenCV-Python 接口
cv2.imread() 读出来同样是 array 形式,但是如果是单通道的图,读出来的是三通道的。
1 import cv2 2 3 img = cv2.imread('fur.jpg') 4 h,w,c = img.shape 5 cv2.imshow('window_title', img) 6 cv2.waitKey(5000) #里面的参数表示延迟多少毫秒,默认为0.当参数小于等于0时,可以理解为延迟无穷大毫秒,就是暂停了。不使用该函数的话会发现图片一闪而过,观察不到。 7 cv2.imwrite('new2.jpg',img)
方法四:图像处理库 Scipy
读出来是 array 形式,并且按照(H,W,C)形式保存
1 import scipy.misc 2 import matplotlib.pyplot as plt 3 4 img = scipy.misc.imread('fur.jpg') 5 scipy.misc.imsave('new3.jpg',img) 6 plt.imshow(img) 7 plt.show()