によると、 postとOpenCVのドキュメントから多次元マットの各要素を初期化してアクセスすることができます。OpenCVの多次元Matのアクセスサブマトリクス
実際には、まずMATLABでコード化し、今はOpenCVに変換する必要があります。 MATLAB行列は、a(:、:、3)またはb(:、:、3:5)のような部分行列アクセスをサポートします。
これはOpenCVで実行できますか?私が知る限り、これは2D Matで行うことができます。 2Dについてはどうですか?
Edit01: さらに、多次元Matでは、colsとrowsのプロパティでは3つのサイズの行列を特徴づけることができません。 3より大きい次元のケースがあります。これらのプロパティを保存する方法は?
Edit02:
// create a 100x100x100 8-bit array
int sz[] = {100, 100, 100};
Mat bigCube(3, sz, CV_8U, Scalar::all(0));
私はOpenCVのマットとサブマトリックスアクセスのアイデアをあきらめます。おそらく、OpenCVではサポートされていない可能性があります。しかしこのサンプルコードから、コンストラクタは 'sz'から3次元を受け取ります。この3次元のマットのどの特性が渡されますか?おそらくこの場合、rows = 100、cols = 100、other ?? = 100 私はOpenCVのドキュメント
Edit03で迷ってしまいました:私はmat.hppからEdit02でのコンストラクタの定義を見つけたOpenCVのソース から追跡マットクラス:
inline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s)
: flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
{
create(_dims, _sz, _type);
*this = _s;
}
次の質問ですここでどのように「作成」機能が定義されていますか? => OpenCVでこのMatの定義をトレースすることは、おそらくMat Matrixで自分の機能を変更/カスタマイズするのに役立ちます。
PS:私の投稿があまりにも面倒です!私はプログラマーであり、プログラミングの問題を解決しようとしています。私のアプローチがうまくいかない場合、Plzは私を修正することができます。ありがとうございました!!
多次元Matのコンストラクタを含むコンストラクタのすべての宣言を見るにはcore.hppを使用しました。しかし、3次元がどのようなプロパティになるかを見るために、そのコンストラクタのコーディングを意味する定義がどこにあるのかわかりませんでした。そのソースコードはどこですか? –
それはそこにあります: /modules/core/src/matrix.cpp。以下の元の問題に関する私の答えを編集しています –
remi
このコードを書くことになりましたか?私は同じことをやろうとしています... – kmac