1

以前はOpenCV1.1を使用していたプロジェクトがあり、現在はOpenCV2.2を使用するように移動しています。このプロジェクトはopencvの顔検出を使用しており、バージョン2.2では1.1よりも約2倍遅くなっています。この速度低下は、このプロジェクトのリアルタイムパフォーマンスに影響を与えています。

プロジェクトの他のタイムクリティカルではない部分に2.2を使用しながら、1.1でfacedetectorを使用できるかどうか疑問に思いました。それで、私は限られた成功でいくつかのことを試みました。最初に同じプロジェクトで両方のバージョンを使用しようとしましたが、解決できないさまざまなビルドの問題がありました。次に、1.1で顔検出器だけを使用してdllを作成し、2.2を使用したプロジェクトでこのdllを使用しようとしました。これは機能しますが、奇妙なことに、顔検出の速度の向上(dllにラップされたopencv1.1)を測定できますが、プロジェクトの残りの部分の速度が低下しているようです。何が起こっているのかわかりません。おそらく、opencvバージョン間の内部競合、デッドロックなどです。

誰かがこれを以前に試したことがありますか?どんな助けでもいただければ幸いです

マーティン。

4

1 に答える 1

0

それは働くことができます。プロジェクトをv1.1DLLにリンクしないでください。また、OpenCV 1.1 DLLの名前を別の名前に変更し、システムでv2.2DLLと競合する可能性を防ぐこともおそらく最善です。

秘訣は、DLLを動的にロードすることですLoadLibrary()v1.1 DLLをアプリケーションにロードし、関数のアドレスを取得するために使用GetProcAddress()します(後でコードで呼び出すことができるようにするため)。

GetProcAddress()注:コードで使用しているOpenCVv1.1のすべての関数に対して1回呼び出す必要があります。

于 2011-08-02T16:48:07.640 に答える