如何从 cv::Mat 获取 BGR 数据和 data_size

问题描述

我可以从 Mat.data 指针获取 BGR 数据,但我不知道如何计算数据大小。有人可以帮助我吗?谢谢。

解决方法

如果你的矩阵是连续的,我会选择 cv::Mat::total() 获取元素数量,cv::Mat::elemSize() 获取以字节为单位的矩阵元素大小:

Mat m;
//...

uchar* data = m.data();
auto datasize = m.total() * m.elemSize();

另一种可能是(但我不太确定,所以请仔细检查一下)来区分 cv::Mat::dataendcv::Mat::datastart

auto datasize = m.dataend - m.datastart;

如果你的矩阵不连续,我猜你仍然可以使用第一种方法来获取大小,但不要memcpy()那个字节数,因为它不会是你的图像数据。