SSブログ

cv::Mat 画像データを共有メモリを使用しC++からVB.NETへ転送する方法 [VB]

OpenCVで画像処理を行う部分はWin32 C/C++、GUI部は比較的楽に開発できるVB.NETを使用したかった。そのため画像データを共有メモリ経由でWin32 C/C++ → VB.NETへ転送するコードを書いたが以下の問題のた試行錯誤を繰り返して時間を取られることになった。最終的に成功することが出来たので、コードを残しておく。

試行錯誤した構成

OpenCV cv::MatまたはIplImage画像形式のまま、共有メモリに書き込み、VB.NETでOpenCVを利用できる、OpenCvSharpを導入することで画像を転送する。

C/C++側から共有メモリへ書き込みが出来るが、C/C++、VB.NET共に読み込みできない。調査を進めると、画像データ内のポインタがエラーとなっていた。調べてみるとポインタの実メモリ部は共有メモリには書き込まれていないことが判明。確かに別のアドレス空間から、このポインタを参照してもデータにはアクセスできないですね。

今回の構成

C/C++側でOpenCVデータをビットマップに変換し、そのデータ部を共有メモリに書き込む。ビットマップインフォメーション部の転送は時間がないので今回は考えていない。おいおい「構造体の共有メモリ転送」としてアップします。

以下にコードを示す。


C++側ソース

BmpMemクラス ----------

BmpMem.h

image

BmpMem.cpp

image

image

image

main()部

image


VB.NET部

image

image

参考サイト


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。