假设我创建一个矩阵M1,有5行1列,8UC3类型,用于存储图像的RGB组件。然后我创建另一个矩阵M2, 5行3列,8UC1类型,再次存储图像的RGB组件。
这两种类型的矩阵在内存中存储/访问的方式有区别吗?从我的理解http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00053000000000000000(通常推荐的OpenCV教程Stackoverflow),矩阵的数据指针指向数据数组的第一个索引(矩阵内部存储为数组)和各种RGB组件以交织的方式存储(在8UC3的情况下)。
我的逻辑说它们应该与1列8UC3(M1)的情况相同,对于每列RGB组件都存储,并且在3列8UC1(M2)的情况下,每列存储RGB组件。我希望我的问题表达得很好。
提前感谢!
你的理解是正确的。内存布局将完全相同。因此,您可以通过重塑方法轻松地来回转换表示。
不同的是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