python读取图像的几种方法
方法一:
利用PIL中的Image函数,这个函数读取出来不是array格式。这时候需要用np.asarray(im)或者np.array()函数,区别是 np.array()是深拷贝,np.asarray()是浅拷贝。
from PIL import Image
import numpy as np
I = Image.open('./cc_1.png')
I.show()
I.save('./save.png')
I_array = np.array(I)
print(I_array.shape)
方法二:
利用matplotlib.pyplot as plt用于显示图片,matplotlib.image as mpimg用于读取图片,并且读取出来就是array格式。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
I = mpimg.imread('./cc_1.png')
print(I.shape)
plt.imshow(I)
方法三:
利用opencv-python接口,cv2.imread()读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的。
import cv2
I = cv2.imread('./cc_1.png')
print(I.shape)
方法四:
图像的存取一般喜欢用scipy这个库里的东西,读出来是矩阵形式,并且按照(H,W,C)形式保存。
import matplotlib.pyplot as plt
from scipy import misc
import scipy
I = misc.imread('./cc_1.png')
scipy.misc.imsave('./save1.png', I)
plt.imshow(I)
plt.show()
方法五:
用skimage库。
from skimage import io,data
img=data.lena()
io.imshow(img)
OpenCV和PIL.Image读取图片的区别
imshow
OpenCV : cv2.imshow()采用BGR模式,通过cv2.imread()读取;
matplotlib.pyplot : plt.imshow() 采用RGB模式, 通过plt.imread()读取;
PIL.Image : img.show() 采用RGB模式, 通过Image.open()读取;img为图片对象
备注:通过cv2.VideoCapture方法来读取video的frame,得到的frame的通道顺序是BGR的!!!
下面一组图依次是:img、plt.imshow(cv_img)、Img_img.show()、plt.imshow(plt_img)
cv2(BGR)
# img为BGR通道
img = cv2.imread(img_path, mode) # mode = [1, 0, -1]依次表示彩色、灰度、彩色+alpha, 默认为1;
cv2.imshow('test', img)
cv2.waitKey(0) # 保持图形界面,直到你在终端输入任意字符
cv2.destroyAllWindows()
PIL.Image(RGB)
img = Image.open(img_path)
img.show()
PIL.Image转OpenCV
cv2_img = cv2.cvtColor(numpy.asarray(Img_img),cv2.COLOR_RGB2BGR)
OpenCV转PIL.Image
pil_img = Image.fromarray(cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB))
参考链接:
https://blog.csdn.net/hjxu2016/article/details/79104607
https://blog.csdn.net/On_theway10/article/details/91814197