opencv - 查找 cv::Mat 的字节大小

标签 opencv

我将 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/

相关文章:

javascript - "emcc"命令无法识别

c++ - Glibcxx 错误编译 FREAK OpenCV 演示文件

java - OpenCV 2.4.8 中的 detectMultiScale 参数,Java

android - 使用 openCV 在 Android 中进行模板匹配

python - 从图像中获取两个图像,图像中有两个图像粘贴在一个文档中 - Python/C++

c++ - OpenCV 创建每行包含多个图像的矩阵

visual-c++ - OpenCV 特定物体检测

c++ - 将值插入已发布的图像?

python - 使用opencv将模拟视频抓取到python中

python-3.x - 图像处理以去除图像中的噪声