1

我正在研究一个采用视频帧的 Matlab 代码,将它们放在一个单元格数组中,例如

frames{fr} = read(videoObj, fr);

对于示例视频,我检查了帧单元格,它包含 84 帧(视频有 84 帧),并且所有单元格都充满了图像。

我有一个 mex 文件,作为标准,它是这样的

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

正如我已经阅读了 mex 文件创建的属性,他们说输入prhsconst mxArray这样,无论在 mex 代码中发生什么,输入都不会改变。我将 matlab 的框架单元格数组作为 mex 文件的输入,就像prhs[0]框架单元格一样,我做了一些处理(我发誓我不会改变我所接受的内容prhs[0])。但是,当我调试 Matlab 代码时,我看到在调用 mex 文件(并将帧作为输入给 mex 文件)之后,我的帧单元格的最后一个单元格似乎被删除了。当我查看第 84 个单元格时,它是[],有时它是一个随机数,例如 8 或 4。我不明白当我调用 mex 文件时,我的框架单元格的最后一列如何或为什么消失。

您可能认为我的 Matlab 代码可能有错误,但是当我调试时,我在处理 mex 之前查看了帧,它有 84 个单元格,最后一个单元格是预期的图像,但是在我调用 mex 之后,帧仍然是 84 个单元格,但最后一个单元格是[]:空的。

如果有人可以帮助我,我将不胜感激,为什么会发生这样的事情?不const mxArray意味着'输入不会在墨西哥改变'?

4

1 回答 1

0
  1. const mxArray* prhs[]覆盖了指向唯一mxArray[]的指针。事实证明,可以(尽管风险很高)更改mexFunction.

  2. 另一点值得注意的是,虽然 matlab 中的数组和单元格是从 索引的1..n,但 in C/C++(尤其是在mex文件中)元素的索引是从0 ,..., n-1。因此,在调试器中您看到它cell[84]是空的(或其中有一个随机值)的事实是因为您正在访问超出单元格数组的末尾

于 2013-01-04T09:48:16.187 回答