方法一:利用 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()
posted on 2019-05-06 20:56  飘涧雪  阅读(34256)  评论(0编辑  收藏  举报