opencv - OpenCV:1列8UC3类型的矩阵与3列8UC1类型的矩阵之间的差异

假设我创建了一个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分量。
我希望我能够很好地提出我的问题。

提前致谢!

最佳答案

您的理解是正确的。内存布局将完全相同。因此,您可以通过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

https://stackoverflow.com/questions/5906161/

相关文章:

opencv - 如何将opencv添加到Turbo C++?

qt - 从IPLImage转换为Qt中的QImage

python - 在 Jython 中使用 JavaCV

iphone - iPhone应用程序的openframeworks库问题仅Mac应用程序不存在

iphone - 在iPhone ios 4上显示来自opencv的关键点

qt - 在带有按钮和文本控件的窗口中显示 opencv 框架

opencv - 在macports上使用opencv编译代码

image-processing - OpenCV中检测到的轮廓数量不匹配

xcode - 在XCode4中的OpenCV中设置项目

opencv - 构建OpenCV 2.2 HTML文档