C/C++でコンピュータービジョンを使用する場合、どのライブラリから選択する必要がありますか?
グーグルにはたくさんの良い結果があることを私は知っています、しかし多分それが逃した素晴らしい図書館がそこにあるでしょう。
私たちが働いている場所では、 OpenCV を広く使用しています。
優れたビジョン処理ツールの完全なスイートを提供します。私が与えるより詳細な説明とより良い書面による説明については、wikiを読むことをお勧めします。
OpenCVは非常に人気があり、間違いなくそれは良いことですが、C++に真剣に取り組み、STLのようなコンテナーも非常に高速である場合は、これを検討する価値があります。
libCVD
http://savannah.nongnu.org/projects/libcvd
プロジェクトホーム http://www.edwardrosten.com/cvd/index.html
git: http://git.savannah.gnu.org/cgit/libcvd.git
Cambridge Video Dynamics-画像、ビデオキャプチャ、ディスプレイ、コンピュータビジョンなどのライブラリ。線形代数フレームワークのためにTooNとうまく統合します。言語:C++
これは積極的に開発されており、多くの便利な機能とアルゴリズムを備えており、一般的にそれらの人は物事を非常に高速に動作させます。
LGPLです。
Win、Linux、MacOSXでコンパイルすることが可能です。
Pythonにポートを提供して、PythonとSciPyを使用してコンピュータービジョンアルゴリズムのプロトタイプを非常に高速に作成できるようにする意図もあります(よくわかりません)。現在はどの段階ですが、Python会議)にそれに関する論文がありました。)
リアルタイムで何かをしようとしている場合は、libCVDを真剣に検討する必要があります。
たとえば、Georg KleinによるPTAM(Parallel Tracking And Mapping)フレームワークはこのライブラリを使用します。
OpenCVは非常に成熟しており、コンピュータービジョンのほとんどの領域をカバーしています。
産業用マシンビジョンの場合、可能な選択肢は次のとおりです。
組み込みマシンビジョン用のより専門的なライブラリもあります-例: Vision ComponentsのVCLib および特定のタスク用-例:データマトリックス認識には libdmtx があります。
どちらが優れているかについて技術的な答えを出すのは難しいでしょう。さまざまな博士号が仕事のためのさまざまなコンピュータビジョンの問題に取り組んでおり、それらはすべてOpenCVを使用して推奨しています。
暗示されている可能性がありますが、元の質問では、ライブラリがFOSSであるとは指定されていませんでした。 2つの主要な商用ライブラリは次のとおりです。
どちらもC++をサポートし、30日間の無料トライアルを提供しています。
Intel Performance Primitives は、コンピュータビジョンの分野で非常に人気があります。
Matrox ImagingLibraryの使用経験がありません。次の理由でお勧めしません:
オブジェクト指向ではないため、コードの保守とトラブルシューティング/デバッグをより困難にします。
悪いドキュメント/ヘルプマニュアル、説明が不明確/不完全であり、コーディング例が不足しています。たとえば、1つの短いコーディングサンプルで10個の異なる関数の使用法を混合します。
.NET(C#)環境で使用する場合、matroxは管理対象オブジェクトを作成します。このオブジェクトのメモリは、使用後に手動で解放する必要があります。
高い。開発者ライセンスに加えて、すべてのクライアントのランタイムライセンスを購入する必要があります。
ライセンス形式が正しくありません-usbドングルキーを使用してください。ドングルを紛失した場合は、ライセンスを失いました。
OpenCVとopenFrameworksを比較した場合、それはどのように機能しますか? >何でどちらが良いかなど。
上で述べたように、OFはopencvを使用します(ラッパーを提供します)。それらは違いはありません。シンプルなインターレースを提供しようとしています。
多くの人がかなりいいOpenCVを推奨しています(私はpythonラッパーを試しました。これは迅速なプロトタイピングに問題ありません)。 gpuCV もチェックしてみてください。これは、コンピュータービジョン用のGPUの超並列処理の利点を利用しています。そのAPIは、OpenCVが備えているもの(ほとんど互換性があります)と非常によく似ており、すべてのGPUプログラミングをユーザー/開発者から隠します。
openframeworksはopencvを使用し、そのラッパーを提供します。
たとえば、このコードは、opencvを簡単に使用するのに役立つクラスです。
それらは異なるライブラリではありません。
OpenCVはおそらく最も広く使用されていますが、他のいくつかは一見の価値があるかもしれません:
http://cimg.sourceforge.net/ は、非常にSTLに似た、高度にテンプレート化されたライブラリです。これは単一のヘッダーに含まれており、参照による戻りの設計により、一連の操作を1つのステートメントにまとめることができます。それはINRIA(フランス国立研究所)によって支えられています
http://vxl.sourceforge.net/ OpenCVに非常に似ていますが、よりC++の設計になっています。新しいOpenCV2.0c ++バージョンに非常によく似ています。
OpenCVを使用している場合は、 http://camellia.sourceforge.net/ (いくつかのIPP機能の再実装)も参照してください。
OpenCVはおそらく最も有名で、非常に成熟しています。しかし、パフォーマンス上の利点により、最近CUDAベースのシステムに移行しています http://www.nvidia.com/object/cuda_home.html#
また、C#のようなより安全な言語の場合、Aforge.NETフレームワークは非常に優れています。