我是靠谱客的博主 拉长铅笔,最近开发中收集的这篇文章主要介绍OpenCV知识点——Mat矩阵1、OpenCV的Mat矩阵中data、depth、elemSize、elemSize1、step、step1等属性的理解2、习题,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
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等属性的理解
- data:uchar类型的指针,指向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==1;CV_8UC3或CV_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知识点——Mat矩阵1、OpenCV的Mat矩阵中data、depth、elemSize、elemSize1、step、step1等属性的理解2、习题的全部内容,希望文章能够帮你解决OpenCV知识点——Mat矩阵1、OpenCV的Mat矩阵中data、depth、elemSize、elemSize1、step、step1等属性的理解2、习题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复