2012-03-13 3 views
0

バッファからcv :: Matを作成する必要がありますが、データを共有したくないので、Mat(height、width、type、data)コンストラクタを使用できません:このようにcv :: Matの内部バッファを操作するのは安全ですか?

int data[100]; 
cv::Mat m; 
m.create(10, 10, CV_32SC1); // allocate own buffer for m 
for (size_t i = 0; i < 100; ++i) 
{ 
    reinterpret_cast<int*>(m.data)[i] = data[i]; 
} 

私は直接私の希望のタイプ(この場合はint型)のデータをコピーできるようにする(*常にUCHARある)内部バッファをキャストする必要があり、動作しているようです。しかし、私はuchar *を使ってすべての操作を行う方法をドキュメントが好んだことを思い出しました。これはソースバッファをuchar *にキャストし、stepWidthというパラメータを使用してuchar * -unitsの正しいオフセットを取得することを思い出しました。これを逆にするのは困っていますか、CV_32SC1型のMatのバッファは単純にintのバッファであり、違いはありませんか?

答えて

1

はい、CV ::マット内部バッファがデータのわずか1ブロックです - (!ちょうどそれらを解放しません)あなたがなりますようにそれらをどう

画像などの多次元配列(のための唯一の複雑さ、 )は、それぞれの新しい行が必ずしも最後の行の最後から直接続くとは限りません。あなたはデータ(行)を使用する必要があります - 彼らは常に32ビット(64ビット用の64ビットは??ビルド)境界から開始して 行が埋め込まれます。私の場合はcv::Matドキュメント

+0

の「外国人データ」に関する話題があり

、多次元の問題は、私は私が心配する必要はありませんと仮定しそう適用されません。トピックに関しては、私はそのページで「外来」の存在を1つしか見つけず、バッファを共有する構造に適用されます。とりあえずありがとう! – neuviemeporte

関連する問題