如何在opencv的Mat中存储和访问图像

时间:2013-10-09 15:08:58

标签: visual-c++ opencv

我正在尝试使用:

cv::Mat source;
const int histSize[] = {intialframes, initialWidth, initialHeight};
source.create(3, histSize, CV_8U);

用于在一个矩阵中保存多个图像。但是,当我这样做时,它会在dims = 3-1中为我rowscols。 这是对的吗? 如果不是它的错误是什么? 如果是,我如何逐个访问我的图像?

1 个答案:

答案 0 :(得分:1)

阅读课程cv::Mat的文档 - > doc 您可以看到cv::Mat.rowscv::Mat.cols是2D数组中的行数和列数,否则为。

使用source.create(3, histSize, CV_8U);创建3D数组。

cv::Mat doc中写了如何访问元素。 使用create方法,矩阵是连续的,并且以逐个平面的方式组织。


修改

在类定义代码之后的文档中的第一部分文本告诉您如何使用矩阵的step[]参数访问矩阵的每个元素:

如果要访问图像(u, v)的像素i,则需要获取指向数据的指针,并使用指针算法来到达所需的像素:

int sizes[] = { 10, 200, 100 };
cv::Mat M(3, sizes, CV_8UC1);

//get a pointer to the pixel
uchar *px = M.data + M.step[0] * i + M.step[1] * u + M.step[2] * v;

//get the pixel intensity
uchar intensity = *px;