我正在使用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 这里.
| 归档时间: |
|
| 查看次数: |
16621 次 |
| 最近记录: |