私はビデオフレームを取り、それらを次のようなセル配列内に配置するMatlabコードに取り組んでいます
frames{fr} = read(videoObj, fr);
サンプルビデオの場合、フレームセルを確認すると、84フレーム(ビデオには84フレーム)が含まれており、すべてのセルに画像が表示されています。
私はmexファイルを持っています、標準として、それはそのようなものです
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
mexファイル作成のプロパティを読んだので、入力prhs
はconst mxArray
mexコード内で何が起こっても、入力は変更されないようになっていると言われています。matlabのframesセル配列をprhs[0]
framesセルと同様にmexファイルへの入力として指定し、いくつかの処理を行います(取り込んだものを変更しないことを誓いますprhs[0]
)。ただし、Matlabコードをデバッグすると、mexファイルを呼び出した直後(および入力としてmexファイルにフレームを指定した直後)に、フレームセルの最後のセルが削除されたように見えます。84番目のセルを見ると、それは[]
であり、8や4などの乱数である場合もあります。mexファイルを呼び出すと、フレームセルの最後の列が消える方法や理由がわかりません。
Matlabコードにエラーがあると思われるかもしれませんが、デバッグすると、mexが処理される直前のフレームを確認しました。セルは84個あり、最後のセルは期待どおりの画像ですが、mexを呼び出した直後はframesです。まだ84セルですが、最後のセルは[]
:空です。
誰か助けていただければ幸いですが、どうしてそんなことが起こるのでしょうか?const mxArray
'入力がmexで変更されない'という意味ではありませんか?