我将 OpenCV 与 cv::Mat
对象一起使用,我需要知道我的矩阵占用的字节数,以便将它传递给低级 C API。 OpenCV 的 API 似乎没有返回矩阵使用的字节数的方法,我只有一个原始的 uchar *data
公共(public)成员,没有包含其实际大小的成员。
如何找到以字节为单位的 cv::Mat
大小?
最佳答案
常见的答案是计算矩阵中元素的总数并将其乘以每个元素的大小,如下所示:
// Given cv::Mat named mat.
size_t sizeInBytes = mat.total() * mat.elemSize();
这将适用于传统场景,其中矩阵被分配为内存中的连续 block 。
但请考虑系统对矩阵中每行的字节数有对齐约束的情况。在这种情况下,如果 mat.cols * mat.elemSize()
未正确对齐,则 mat.isContinuous()
为 false
,并且之前的大小计算是错误的,因为 mat.elemSize()
将具有相同数量的元素,尽管缓冲区更大!
那么正确的答案是找到每个矩阵行的字节大小,并将它乘以行数:
size_t sizeInBytes = mat.step[0] * mat.rows;
阅读有关步骤
的更多信息 here .
关于opencv - 查找 cv::Mat 的字节大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441072/