Matデータ(or Vectorデータ)を共有メモリに渡す方法
OpenCVのMatデータ、またはVectorデータを共有メモリに渡す方法が分からず困っています。
ポインターの使い方の理解不足かもしれませんが、アドバイス頂ければとても有難いです。
boost/interprocess/managed_shared_memoryを使ってMatのデータを共有メモリ上に保存して別のプロセスに渡したいと思い、下記のようにして渡したところassignの中で落ちてしまいます。
エラー等は一切出ませんでした。
managed_shared_memory shmd(create_only, DEPTHNAME, WIDTH_PIC * HEIGHT_PIC * 4 + 1024);
interprocess_mutex* mxd = shmd.construct<interprocess_mutex>("TheMutex")();
std::vector<float> *ptrd=shmd.construct< std::vector<float> >("DepthImage")();
//ロック
mxd->lock();
//共有メモリに書き込み
ptrd->assign((float*)decodedDepthData2.datastart,(float*)decodedDepthData2.dataend);
//ロックを解除
mxd->unlock();
※cv::Mat decodedDepthDataはCV_32FC1の横:WIDTH_PIC 縦:HEIGHT_PICの深度画像です。
ポインタ型にしなければコピーできるようで
下記のようにしてvector型の変数に値を入れることができています。
cv::Mat M=Mat(480,480,CV_32FC1,「the data ....」);
//copy vector to mat
vector< float> Vf2;
//copy mat to vector
Vf2.assign((float*)M.datastart, (float*)M.dataend);
しかし、下記のようにポインタ型のvector変数にコピーしようとした場合
最初に書いたshared memoryと同じようにAssignの途中でエラーも吐かずに落ちてしまいます。
cv::Mat M=Mat(480,480,CV_32FC1,「the data ....」);
//copy vector to mat
vector< float> *Vf2;
//copy mat to vector
Vf2->assign((float*)M.datastart, (float*)M.dataend);
shared memoryにMatのデータを渡してやるにはどうすればよいでしょうか?
どなたかアドバイス下さい。