查找cv :: Mat的字节大小

时间:2014-10-18 14:53:46

标签: opencv

我将OpenCV与cv::Mat个对象一起使用,我需要知道矩阵占用的字节数,以便将其传递给低级C API。似乎OpenCV的API没有一个返回矩阵使用的字节数的方法,而且我只有一个原始uchar *data公共成员,没有包含其实际大小的成员。 / p>

如何以字节为单位找到cv::Mat大小?

1 个答案:

答案 0 :(得分:29)

常见的答案是计算矩阵中元素的总数,并将其乘以每个元素的大小,如下所示:

// Given cv::Mat named mat.
size_t sizeInBytes = mat.total() * mat.elemSize();

这将适用于传统场景,其中矩阵被分配为内存中的连续块。

但请考虑系统对矩阵中每行的字节数有一个对齐约束的情况。在这种情况下,如果mat.cols * mat.elemSize()未正确对齐,则mat.isContinuous()false,之前的尺寸计算错误,因为mat.elemSize()将具有相同数量的元素,缓冲区更大了!

然后,正确的答案是找到每个矩阵行的大小(以字节为单位),并将其与行数相乘:

size_t sizeInBytes = mat.step[0] * mat.rows;

详细了解step here