cv::Mat::step step1 elemSize elemSize1介绍
引言
在看slam源碼中,常見到cv::Mat類中的step,step1,elemSize和elemSize1等函數和屬性,不了解這些函數和屬性的含義的話,難以看懂slam源碼中對圖像的操作,因此本文介紹這些函數和屬性的含義,并給出具體的例子。
OpenCV圖像的存儲方式
要理解上述函數的函數,首先需要了解圖像在opencv中的存儲方式,圖1顯示了rgb圖像在opencv中的存儲方式。每個元素包含三個通道。
圖1 opencv圖像存儲方式?step,step1,elemSize,elemSize1含義
- step[0]: 圖像一行元素的字節數,圖1中,step[0]就是任意一行,比如row0,所有元素的字節數
- step:是cv::Mat類的一個屬性,等同于step[0]
- step[1]: 圖像一個元素的字節數,圖1中,任意一個元素,比如(row0, col0),該元素又包含三個通道,step[1]就是該任意元素所有通道的字節數
- step1(0): 圖像一行元素的通道數,圖1中,每個元素有3個通道,一行有4個元素,所以step(0)=12, step1()函數等同于step1(0),因為該函數的默認參數是0
- step1(1): 圖像一個元素的通道數,圖1中,每個元素有3個通道,所以step1(1)=3
- elemSize(): 圖像中一個元素的字節數,圖1中,任意一個元素,比如(row0, col0),該元素又包含三個通道,elemSize()就是該任意元素所有通道的字節數
- elemSize1():圖像中一個元素中的一個通道的字節數,圖1中,任意一個元素,比如(row0, col0),該元素又包含三個通道,elemSize1()就是該任意元素一個通道的字節數
示例
可能上面的文字介紹還是比較抽象,下面通過一個例子來進一步介紹
#include <opencv2/core.hpp> #include <iostream>int main(int argc, char **argv) {cv::Mat img(3, 4, CV_16UC3, cv::Scalar_<uchar>(1, 2, 3));std::cout << img << std::endl;std::cout << "step = " << img.step << std::endl;std::cout << "step[0] = " << img.step[0] << std::endl;std::cout << "step[1] = " << img.step[1] << std::endl;std::cout << "step1 = " << img.step1() <<std::endl;std::cout << "step1(0) = " << img.step1(0) << std::endl;std::cout << "step1(1) = " << img.step1(1) << std::endl;std::cout << "elemSize() = " << img.elemSize() << std::endl;std::cout << "elemSize1() = " << img.elemSize1() << std::endl;return 0; }代碼中定義了一個3行4列的Mat類對象img,其中img的每個元素的類型是CV_16UC3,其中CV_16UC3是OpenCV定義好的數據類型,16U代表每個元素的類型是16位的unsigned short類型,C3代表每個元素有3個通道。代碼輸出img的step,step1,elemSize和elemSize1。
?可以看出img的存儲方式與上文介紹的保持一致,每個元素有3個通道。
step:img中一行元素的字節數,img中每個元素的類型是16位unsigned short,也就是說每個元素占2個字節,每個元素有3個通道,一行有4個元素,因此
step[0]:等同于step
step[1]: img中一個元素的字節數,一個元素2字節,包含3通道,
step1(): img中一行元素的通道數,每個元素3通道,一行4個元素,
step1(0): 等同于step1()
step1(1):img中一個元素的通道數,每個元素3通道,?
elemSize(): img中一個元素的字節數,
elemSize1(): img中一個元素的一個通道的字節數,
總結
以上是生活随笔為你收集整理的cv::Mat::step step1 elemSize elemSize1介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式系列之 —— 模式(Patte
- 下一篇: 勾股定理,西方称为毕达哥拉斯定理,它所对