整理了python不同种图片操作方式
PIL | matplotlib | scikit-image | opencv | |
---|---|---|---|---|
包导入 | from PIL import Image | import matplotlib.image as mpimg | from skimage import io | import cv2 |
读取图片 | img=Image.open("lena.jpg") img为PIL图片类型 | img=mpimg.imread("lena.jpg") img为narray类型(0-255整数) | img=io.imread("lena.jpg") img为narray类型(0-255整数) | img=cv2.imread("lena.jpg") img为narray类型(0-255整数) |
显示图片 | img.show() 用电脑自带的图片查看器打开 | plt.imshow(img) plt.show()#显示 | io.imshow(img) plt.show()#显示 | cv2.imshow("window_name",img) |
plt.imshow(img) plt.show()#都可以用这种方法显示 | ||||
保存图片 | img.save("new_lena.jpg") | mpimg.imsave("new_lena.jpg",img) | io.imsave("new_lena.jpg",img) | cv2.imsave("new_lena.jpg",img) |
数据类型转换 | 将PIL图片类型转换为narray数组: img_array = np.array(img) 将narray数组转换为PIL图片: img=Image.fromarray(np.uint8(img_array)) |
几种不同的方式最大的区别在于读取图片的数据类型是PIL还是narray,只要搞清楚这一点就可以使用不同函数达到相同的目的。
我个人比较喜欢下面这一套:
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
##读取图片
img=mpimg.imread(r"E:/lena.jpg")
##显示图片
plt.imshow(img)
plt.show()#一定有这一句不然显示不出来
print("shape:{}".format(np.shape(img)))#查看数据类型
##保存图片
mpimg.imsave(r"E:/new_lena.jpg")
输出结果:shape:(500, 500, 3)