一 读取:
(1) skimage.io.imread的存储格式是RGB
(2) cv2.imread的存储格式是BGR
imread(“image_path",1)在Mat数据存储如下图
OpenCV中imread函数的第二个参数有如下6中情况:
enum
{
/* 8bit, color or not /
CV_LOAD_IMAGE_UNCHANGED =-1,//以图像原始属性读入
/ 8bit, gray /
CV_LOAD_IMAGE_GRAYSCALE =0,//以灰度图像读入
/ ?, color /
CV_LOAD_IMAGE_COLOR =1,//以彩色图像读入
/ any depth, ? /
CV_LOAD_IMAGE_ANYDEPTH =2,//后三种情况未了解,等后续补充
/ ?, any color /
CV_LOAD_IMAGE_ANYCOLOR =4,
/ ?, no rotate */
CV_LOAD_IMAGE_IGNORE_ORIENTATION =128
};
import cv2 as cv
(3) matplotlib: 读取的是 RGB 图
import matplotlib.pyplot as plt #plt 用于显示图片
import matplotlib.image as mpimg #mpimg 用于读取图片
lena= mpimg.imread('lena.png')
(4) PIL
from PIL import Image
im = Image.open('lena.png')
im.show()
PIL读取图片为Image对象,将 PIL Image 图片转换为 numpy 数组要用以下函数:
import numpy as np
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的第一个值。
参考链接:
https://www.jianshu.com/p/3bf8da79f3ab
https://blog.csdn.net/u011028345/article/details/74847601