OpenCV知识点——Mat矩阵

目录

1、OpenCV的Mat矩阵中data、depth、elemSize、elemSize1、step、step1等属性的理解

2、习题

2.1 例一:一个 3 X 4 的矩阵,假设其数据类型为CV_8U。

2.2 例二:一个 3 X 4 的矩阵,矩阵数据类型是 CV_8UC3。

2.3 例三:一个 3 X 4 X 6的矩阵,矩阵数据类型是 CV_16SC4。


1、OpenCV的Mat矩阵中data、depth、elemSize、elemSize1、step、step1等属性的理解

  • datauchar类型的指针,指向Mat数据矩阵的首地址。
  • depth:度量像素每一个通道的精度,它本身与图像的通道数无关!depth数值越大,精度越高。eum{CV_8U=0,CV_8S=1,CV_16S=3,CV_32S=4,CV_32F=5,CV_64F=6}。
  • elemSize:表示矩阵中每一个元素的数据大小(结合通道数,单位:字节)。如Mat的数据类型是CV_8UC1,那么elemSize==1CV_8UC3CV_8SC3,那么elemSize==3。
  • elemSize1:表示矩阵中每一个元素单通道下数据大小(单位:字节),所以有:elemSize1==elemSize/channels。
  • step:矩阵的有效宽度。是累计了一行中所有元素、所有通道、所有通道的elemSize1之后的值。step==width*elemSize1*channels。
  • step[0] :一行的数据大小(step)。
  • step[1] :一个元素的数据(elemSize)。
  • step1(0):一行元素有多少个通道,step1==step/elemSize1=width*channels。
  • step1(1):一个元素有多少个通道(channels)。

2、习题

2.1 例一:一个 3 X 4 的矩阵,假设其数据类型为CV_8U。

  • M.dims == 2 (这是一个二维矩阵,维度为 2 )。
  • M.rows == 3 M.cols == 4
  • M.elemSize() ==1 M.elemSize1() == 1 sizeof(uchar) = 1 ,那么每一个数据元素大小为 1 )。
  • M.depth() == 0 M.channels() == 1 CV_8U 得到)。
  • M.step[0] ==4 M.step[1] == 1 (因为是二维矩阵,那么 step 数组只有两个值, step[0] step[1] 分别代表一行的数据大小和一个元素的数据大小)。
  • M.step1(0)== M.cols *M.channels= 4,M.step1(1) ==M.channels=1。

2.2 :一个 3 X 4 的矩阵,矩阵数据类型是 CV_8UC3

  • M.dims == 2 (这是一个二维矩阵,维度为 2 )。
  • M.rows == 3 M.cols == 4
  • M.elemSize() == 3 M.elemSize1() == 1 sizeof(uchar) = 1 ,那么每一个数据元素大小为 1 )。
  • M.depth() == 0 M.channels() == 3 CV_8UC3 得到)。
  • M.step[0] == 12 M.step[1] == 3 (因为是二维矩阵,那么 step 数组只有两个值, step[0] step[1] 分别代表一行的数据大小和一个元素的数据大小)。
  • M.step1(0) == M.cols * M.channels() = 12,M.step1(1) * M.channels()== 3

2.3 例三:一个 3 X 4 X 6的矩阵,矩阵数据类型是 CV_16SC4

  • M.dims == 3 (这是一个三维矩阵,维度为 3 )。
  • M.rows == 4 M.cols == 6
  • M.elemSize()== 2 * 4 == 8 M.elemSize1() == 2 sizeof(short) = 2 ,那么每一个数据元素为 2 )。
  • M.depth() == 3 M.channels() == 4 CV_16SC4 得到)。
  • M.step[0] == M.rows * M.cols * M.elemSize()= 4 * 6 * 8 = 192 (面元素个数 * 元素大小)。
  • M.step[1] == M.cols * M.elemSize()= 6 * 8 = 48 (行元素个数 * 元素大小)。
  • M.step[2] == M.elemSize()= 8 (元素大小)。
  • 因为是三维矩阵,那么 step 数组有三个值, step[0] step[1] step[2] 分别代表一个面的数据大小、一行的数据大小和一个元素的数据大小。则 M.step1(0) == M.step[0] / M.elemSize1() M.step1(1) / M.elemSize1() M.step1(2) / M.elemSize1()

你可能感兴趣的:(OpenCV知识点,opencv)