cv :: Matの内部に複雑なデータ構造を保持することは可能ですか?

私はcv :: Mat画像を持っていますが、同じサイズの2番目のcv :: Matを持つことを考えていますが、各エントリはそのピクセルに対応する複雑なデータ構造を格納しています。これはcv :: Matで行うことができますか、それとも私がそこで開いているベクトルのベクトルですか?

1

2 答え

cv :: Mat をご覧ください特にコンストラクタと typechannels および depth メソッドを使用すると、単純なOpenCVデータ型(8/16/32ビット整数、32/64ビット浮動小数点数、またはこれらの1/2/3/4タプルですが、混合物はもちろんありません)。

しかし、それでも2次元配列/行列/イメージ(すべての行が同じ数の列を持つ)のベクトルのベクトルを提案するのではなく、単純な1Dベクトルで、単純なインデックスマジックを使ってマッピングを行います2D~1D。これははるかに良いメモリの局所性と割り当ての動作を備えています。

1
追加された

それはあなたのデータ構造がどのように「複雑」であるかに依存します。同じタイプの要素を持つ構造体しか使用できません。そして、opencvはあなたにこの可能性を提供します

Vec

例で

Vec<6,float> vv;
//fill vector
vv.push_back(Vec6f(1,2,3,4,5,6);
Mat m(vv);

Vec<6,float> vec = m.at(1);

クリスチャンが言っているように、タイプを混在させることはできません(浮動小数点チャンネルとcharを持っている)

0
追加された
もちろん、単純整数型や浮動小数点型以外の型を使用することもできません。
追加された 著者 Christian Rau,