一 读取:
(1)skimage.io.imread与cv2.imread都可以读取图像,且都是numpy格式,但cv2的存储格式是BGR,而skimage的存储格式是RGB。
(2)matplotlib:
import matplotlib.pyplot as plt #plt 用于显示图片
import matplotlib.image as mpimg #mpimg 用于读取图片
import numpy as np
lena= mpimg.imread('lena.png')
matplotlib 读取的是 RGB 图
(3)PIL
from PIL import Image
im = Image.open('lena.png')
im.show()
PIL读取图片为Image对象,将 PIL Image 图片转换为 numpy 数组要用以下函数:
im_array = np.array(im)
二、图像数据类型以及转换:
-
一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换。这些数据类型及取值范围如下表所示:
一张图片的像素范围是[0, 255],所以类型是unit8,可以通过以下代码查看图像的数据类型:
from skimage import io, data
img = data.chelsea()
print(img.dtype.name)
2, 转换
推荐使用skimage,实测很好用,不管图像深度是多少维。
三,矩阵
关于矩阵,本来不该放在图像中,但是考虑到图像就是矩阵(Everything is matrix),很多对图像的操作实际就是对矩阵的操作,因此一并记录:
主要是考虑矩阵的切片和索引:(亲自实践理解会更深刻,但总是会忘)
多维矩阵的话,最外边的大括号里的元素数量就是shape的第一个值。