查找cv :: Mat的字节大小

Sta*_*ort 10 opencv

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

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

Sta*_*ort 35

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

// Given cv::Mat named mat.
size_t sizeInBytes = mat.total() * mat.elemSize();
Run Code Online (Sandbox Code Playgroud)

这将在传统方案中起作用,其中矩阵被分配为存储器中的连续块.

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

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

size_t sizeInBytes = mat.step[0] * mat.rows;
Run Code Online (Sandbox Code Playgroud)

了解更多关于step 这里.