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)

python图像读取_ide

python图像读取_ide_02

python图像读取_ide_03

python图像读取_.net_04

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))

参考链接: