机器视觉之OpenCV教程图像容器Mat类基础一(二)
一、Mat像素点的存储方法
- 色彩空间是指我们通过组合颜色分量来对各种颜色编码
- 灰度图像: 从黑到白 ,逐渐过渡 , 划分成若干灰度级别
- 彩色图像RGB模型: rgb是最常用的颜色模型 , 人类就是这样感知 光线的 , 在OpenCV中通道顺序是(blue 、 green 、 red)。
- 彩色图像HSV和 HLS模型:是更贴近自然的颜色模型
- 彩色图像YCrCB模型: 通常在JPEG图像中
- CIE*a*b模型是一种感官 均匀的色彩空间 , 当我们要度量色彩之间的距离时通常会使用到。
- 每一种色彩空间的颜色分量都有他各自 的取值范围 , 不同的范围要用到不同的位宽的数字来存储 , 这就引出了Mat的数据类型
7
二、Mat数据类型
- 最小的数据类型是char , 也就是一个字节8bits , 他的取值范围是 【-128~127】。在灰度图像和RGB图像中 , 一般用无符号8位 , 即uchar类型 , 求值范围是【0~255】 , 这样 在RGB色彩空间中 , 可以有255^3中不同的颜色(16581375种)。
- Mat中 CV_8u 表示无符号char类型
- CV_8S 表示有符号char类型
- CV_16U 表示无符号short类型
- CV_32F 表示对应的float类型
- 采取的Mat数据类型要与图像的信息相对应 , 否则会出异常
三、显式的创建Mat对象
- Mat可以当做存放图像的容器, 也可以当做一个矩阵类来存放和操作任意的矩阵
- 二维的Mat可以直接使用输出流输出 。
创建一个Mat
二维矩阵 Mat m(行数 , 列数 , 数据存储格式C通道数 , 定义bgr作为所有像素的初始值) 三维矩阵 int[] sz = {2,2,2} Mat m(维度, sz , 数据存储格式C通道数 ,定义bgr作为所有像素的初始值 )
- 使用 create函数显示的创建一个Mat对象
- 使用create函数, 无法初始化 , 如果有新的需求跟原来的内存块不匹配 , 才会重新分配内存区域, 可以减少开辟内存Dev动作 , 提升效率。
克隆矩阵的一部分
创建 一个 新的矩阵头 , 然后将已经存在的矩阵的一部分拷贝进去 。
Mat mm = m.row(1).clone(); 只拷贝矩阵第二行
使用Randu随机函数填充 一个随机矩阵
Mat m = Mat(3,2,CV_8U3); randu(R , 行范围 , 列范围);