什么是OpenCV中Mat对象的头部?

4
我刚开始学习C++编程和OpenCV。我正在学习OpenCV中的Mat类,参考了这个教程。它说“每个Mat对象都有自己的头”,并多次使用头这个术语。我不确定在这种情况下头是什么意思?
我尝试谷歌搜索并找到这个页面,其中写道:“Mat基本上是一个带有两个数据部分的类:矩阵标题(包含诸如矩阵大小、存储方法、矩阵存储地址等信息)......”
现在我明白大小是什么意思了,但我有两个问题需要澄清:
1. “用于存储的方法”是什么意思? Mat类中的哪个成员表示这一点? 2. 至于地址,它是否对应于Mat类中的“datastart”成员?
谢谢!

也许你可以将其视为一个“数据包”,前面有一个小的描述性部分(宽度、高度、类型等),后面跟着实际的内容/数据/像素。 - berak
感谢@berak的回复。我刚刚编辑了我的问题,寻求更详细的澄清。请考虑回答它。 - Ruchir
1
对于像图像这样的大数据元素,用户不想每次都复制所有数据(例如在每个函数调用中),但通常使用指针并不安全。因此,OpenCV使用那些矩阵头(cv::Mat对象)作为对象,这些对象复制起来不会很昂贵。相反,大量的数据是通过该头中的指针给出的。因此,每当您复制cv::Mat对象(例如使用复制构造函数)时,您不会复制整个图像/像素数据,而只是复制头文件。 - Micka
感谢 @Micka 的回答。 - Ruchir
1个回答

1
根据OpenCV 文档
Mat基本上是一个带有两个数据部分的类:矩阵头(包含诸如矩阵大小、存储方法、矩阵存储地址等信息)和指向包含像素值的矩阵的指针(根据所选的存储方法可以具有任意维度)。矩阵头大小是恒定的,但矩阵本身的大小可能因图像而异,通常比数量级大得多。

感谢@mystic_coder的回复。我刚刚编辑了我的问题,寻求更详细的澄清,希望您能解答。 - Ruchir
@mystic_coder,请开始适当地格式化你的答案,以便它们更易读。 - sehe
“矩阵头大小是恒定的”是什么意思? - skpro19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接