6

OpenCV を使用する c++ プログラムを開発しました。現在、C# で Windows フォーム ベースのアプリケーションを開発したいと考えています。C# はマネージ コードしか処理できないため、OpenCV を C# アプリケーションで直接実行することはほとんど不可能です。OpenCV を使用して C# アプリケーションを作成するさまざまな方法を検索しました。そのうちの 1 つは EmguCV であり、C# アプリケーションに c++ .dll ファイルをインポートし、この方法でアンマネージ関数を呼び出す方法にもっと関心があります。

私はC++で単純な関数を作成することから始めました.dllをインポートすることで、C#アプリケーションでcout使用できました。cinこの問題は、C++ アプリケーションに OpenCV ヘッダー ファイルをインクルードしようとすると発生し、コンパイルするとこのエラーが発生します。

エラー LNK1104: ファイル 'tbb_debug.lib' を開けません

以前にこれを行った人もいますが、ピクチャボックスに cv::Mat 形式でウェブカメラフィードを表示するで、彼が c++ と C# をどのようにインターフェースするかわかりません

質問は、cv::Mat 変数を受け取り、それに画像処理を実行し、処理された行列を返す関数があることです。C# アプリケーションで C++ で記述された関数を使用したいと考えています。しかし問題は、C++ に OpenCV ライブラリを含めると dll を作成できないことです。

したがって、EmguCV やその他の .NET ラッパーを OpenCV に使用するように勧めないでください。

プロジェクトに Visual Studio 2010 を使用しています。

4

2 に答える 2

3

エントリポイントをC++ヘッダーでラップするメソッドを明示的にエクスポートし、P/Invokeを使用してそれらを参照します。

extern "C" __declspec(dllexport) BOOL DoSomething();

次に、C#でそれらを消費します。

[DllImport("MyOpenCVWrapper.dll")]
private static extern bool DoSomething();

私はOpenCVヘッダーを参照しようとはしませんでした。

于 2012-11-21T12:33:12.077 に答える
1

それはあなたが探しているものではないかもしれませんが、私はC ++ / CLIでそのタスクを実行し、アセンブリを通してそれを公開しました。それは簡単で、かなりうまくいきました。 こちらのブログ記事

于 2012-11-21T13:12:40.553 に答える