OpenCV:具有1列8UC3类型的矩阵和3列8UC1的矩阵之间的差异

时间:2011-05-06 02:22:29

标签: opencv matrix

假设我创建了一个5行和1列8UC3类型的矩阵M1来存储图像的RGB分量。然后我创建另一个5行和3列8UC1类型的矩阵M2来再次存储RGB组件图像。

这两种类型的矩阵在内存中存储/访问的方式有何不同?根据我从http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00053000000000000000(通常推荐的Stackoverflow上的OpenCV教程)的理解,矩阵的数据指针指向数据数组的第一个索引(矩阵在内部存储为数组),各种RGB组件是以交织方式存储(在8UC3的情况下)。

我的逻辑说它们应该与1列8UC3(M1)的情况相同,对于每列存储RGB分量,并且在3列8UC1(M2)的情况下,每列存储RGB分量。 我希望我能很好地提出我的问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的理解是正确的。内存布局将完全相同。因此,您可以通过reshape方法来回低价地转换表示。

不同的是OpenCV算法将如何处理这些矩阵。

假设内存占用量如下:

255 0 0 
255 0 0 
255 0 0 
255 0 0 
255 0 0 

并且您想调用resize函数添加3列。然后在CV_8UC3的5x1 Mat的情况下,结果将是

255 0 0 255 0 0
255 0 0 255 0 0
255 0 0 255 0 0
255 0 0 255 0 0
255 0 0 255 0 0

如果是CV_8UC1的5x3 Mat,结果将是

255 255 0 0 0 0
255 255 0 0 0 0
255 255 0 0 0 0
255 255 0 0 0 0
255 255 0 0 0 0