计算机视觉之OpenCV教程 --- Mat图像类基础(二)

机器视觉之OpenCV教程图像容器Mat类基础一(二)

一、Mat像素点的存储方法

  1. 色彩空间是指我们通过组合颜色分量来对各种颜色编码
    1. 灰度图像: 从黑到白 ,逐渐过渡 , 划分成若干灰度级别
    2. 彩色图像RGB模型: rgb是最常用的颜色模型 , 人类就是这样感知 光线的 , 在OpenCV中通道顺序是(blue 、 green 、 red)。
    3. 彩色图像HSV和 HLS模型:是更贴近自然的颜色模型
    4. 彩色图像YCrCB模型: 通常在JPEG图像中
    5. CIE*a*b模型是一种感官 均匀的色彩空间 , 当我们要度量色彩之间的距离时通常会使用到。
  2. 每一种色彩空间的颜色分量都有他各自 的取值范围 , 不同的范围要用到不同的位宽的数字来存储 , 这就引出了Mat的数据类型
    7

二、Mat数据类型

  1. 最小的数据类型是char , 也就是一个字节8bits , 他的取值范围是 【-128~127】。在灰度图像和RGB图像中 , 一般用无符号8位 , 即uchar类型 , 求值范围是【0~255】 , 这样 在RGB色彩空间中 , 可以有255^3中不同的颜色(16581375种)。
  2. Mat中 CV_8u 表示无符号char类型
  3. CV_8S 表示有符号char类型
  4. CV_16U 表示无符号short类型
  5. CV_32F 表示对应的float类型
  6. 采取的Mat数据类型要与图像的信息相对应 , 否则会出异常

三、显式的创建Mat对象

  1. Mat可以当做存放图像的容器, 也可以当做一个矩阵类来存放和操作任意的矩阵
  2. 二维的Mat可以直接使用输出流输出 。
  3. 创建一个Mat

    二维矩阵
    Mat m(行数 , 列数 , 数据存储格式C通道数 , 定义bgr作为所有像素的初始值)
    三维矩阵
    int[] sz = {2,2,2} 
    Mat m(维度, sz , 数据存储格式C通道数 ,定义bgr作为所有像素的初始值 ) 
    
  4. 使用 create函数显示的创建一个Mat对象
    1. 使用create函数, 无法初始化 , 如果有新的需求跟原来的内存块不匹配 , 才会重新分配内存区域, 可以减少开辟内存Dev动作 , 提升效率。
  5. 克隆矩阵的一部分

    1. 创建 一个 新的矩阵头 , 然后将已经存在的矩阵的一部分拷贝进去 。

      Mat mm = m.row(1).clone();  只拷贝矩阵第二行
      
  6. 使用Randu随机函数填充 一个随机矩阵

    Mat m = Mat(3,2,CV_8U3);
    randu(R , 行范围 , 列范围);   
    

你可能感兴趣的:(机器视觉,OpenCv)