OpenCV 中 Mat 对象的标头是啥意思?

Posted

技术标签:

【中文标题】OpenCV 中 Mat 对象的标头是啥意思?【英文标题】:What is meant by header of a Mat object in OpenCV?OpenCV 中 Mat 对象的标头是什么意思? 【发布时间】:2015-06-25 09:47:40 【问题描述】:

我是 C++ 编程和 OpenCV 的新手。我正在阅读关于 OpenCV 中 Mat 类的 this 教程。它说“每个 Mat 对象都有自己的标题”并多次使用术语标题。我不确定标题在这种情况下是什么意思?

我尝试谷歌搜索并找到this 页面,上面写着:“Mat 基本上是一个包含两个数据部分的类:矩阵标题(包含矩阵的 大小 等信息,用于存储的方法,在存储的矩阵是哪个地址,等等)............”

现在我明白了大小是什么意思,但我有两个问题需要澄清:

    “用于存储的方法”指的是什么? Mat 类中的哪个成员表示这一点? 地址,是否对应Mat类中的“datastart”成员?

谢谢!

【问题讨论】:

也许你可以把它想象成一个“数据包”,前面有一个小的描述部分(宽度、高度、类型等),后面是实际的内容/数据/像素跨度> 感谢@berak 的回复。我刚刚编辑了我的问题,寻求更详细的说明。请考虑回答。 对于像图像这样的大数据元素,用户不想一直复制所有数据(例如在每个函数调用中),但使用指针通常是不安全的。所以opencv使用那些矩阵头(cv::Mat obhect)作为复制成本不高的对象。相反,大量数据由该标头中的指针给出。因此,每当您复制 cv::Mat 对象(例如使用复制构造函数)时,您不会复制整个图像/像素数据,而只是复制标题。 感谢@Micka 的回答。 【参考方案1】:

根据 OpenCV documentation:

Mat 基本上是一个包含两个数据部分的类:矩阵头(包含诸如矩阵大小、用于存储的方法、存储矩阵的地址等信息)和指向包含像素值的矩阵(根据选择的存储方法采用任何维度)。矩阵头大小是恒定的,但是矩阵本身的大小可能因图像而异,通常会大几个数量级。

【讨论】:

感谢@mystic_coder 的回复。我刚刚编辑了我的问题,该问题寻求对您所写内容的更详细说明。请澄清。 @mystic_coder 请开始正确格式化您的答案,以便它们可读。 “矩阵头大小不变”是什么意思?

以上是关于OpenCV 中 Mat 对象的标头是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV阶段总结扩充。

opencv 中mat类型对应的头文件是啥?

opencv 中mat类型对应的头文件是啥?

opencv 中mat类型对应的头文件是啥?

OPENCV,rects.push_back(mr);这句话是啥意思?

在 OpenCV 中 std::vector 而不是 cv::Mat 的 `type` 的解释是啥,我该如何更改它? (C++)