第1回 OpenCVとは? 最新3.0の新機能概要とモジュール構成:OpenCV入門【3.0対応】(2/2 ページ)
オープンソースのコンピューター・ビジョン・ライブラリ「OpenCV」 3.0のリリースに合わせて連載再始動! 今回はOpenCVの概要と基本機能を紹介する。ベータ→正式版に合わせて改訂。
3. 主要モジュール紹介
OpenCVでは、カテゴリごとに機能をまとめた「モジュール」という単位でライブラリが提供されています。そのため、アプリケーション開発者は必要な機能を含んだモジュールのライブラリをリンクすることで、モジュールの機能を用いることができるようになります。
3.1 モジュール構成
以下の表にOpenCVを構成する主要ライブラリと、その機能の概要をまとめました。
モジュール名 | ライブラリ名 | 概要 |
---|---|---|
calib3d | opencv_calib3d300.lib | カメラキャリブレーション、ステレオ対応点探索 |
core | opencv_core300.lib | 画像・行列データ構造の提供、配列操作、基本図形描画、XMLおよびYAML入出力、コマンドラインパーサー、ユーティリティ機能など |
features2d | opencv_features2d300.lib | 特徴点抽出(ORB、BRISK、FREAKなど) |
hal | opencv_hal300.lib | ハードウェア機能を用いた最適化(Hardware Acceleration Layer) |
highgui | opencv_highgui300.lib | GUI(ウィンドウ表示など) |
imgcodecs | opencv_imgcodecs300.lib | 画像ファイル入出力 |
imgproc | opencv_imgproc300.lib | フィルター処理、アフィン変換、エッジ検出、ハフ検出、色変換、ヒストグラム計算、ラベリングなど |
ml | opencv_ml300.lib | SVM、決定木、ブースティング、ニューラルネットワークなど |
objdetect | opencv_objdetect300.lib | オブジェクト検出(顔検出、人体検出など) |
photo | opencv_photo300.lib | 画像修復、ノイズ除去処理、HDR(High Dynamic Range)合成、画像合成など |
shape | opencv_shape300.lib | 形状マッチング |
stitching | opencv_stitching300.lib | パノラマ合成 |
superres | opencv_superres300.lib | 超解像処理 |
video | opencv_video300.lib | オプティカルフロー、カルマンフィルター、背景差分など |
videoio | opencv_videoio300.lib | 動画ファイルの入出力、カメラキャプチャなど |
videostab | opencv_videostab300.lib | 手ブレ補正(Video Stabilization) |
viz | opencv_viz300.lib | 3Dデータの可視化(内部的にVTKを使用) |
表6 主要モジュールとその機能概要 |
4. OpenCV 3.0の変更点
ここではOpenCV 3.0の変更点についてまとめます。詳細は、OpenCV 3.0の公式ニュース(英語)をご参照ください。
4.1 モジュールに関する変更点
ここではモジュールに関するOpenCV 3.0の変更点についてまとめます。
4.1.1 モジュール追加
OpenCV 3.0から以下のモジュールが追加されています。詳細は「3.1 モジュール構成」を参照ください。
- shape
- hal
4.1.2 モジュール削除
OpenCV 3.0からは、OpenCV 2.4.xにあった一部のモジュールが削除、もしくはopencv_contrib(=OpenCV用のエクストラモジュール)に移動しています。そのため、OpenCV 2.4.xで作成したコードを3.0でも流用する場合には注意が必要です。
モジュール名(2.4.x) | 削除後の対応 |
---|---|
ocl | oclモジュールは廃止され、cv::UMatに置き換え |
nonfree | opencv_contribに移動 |
legacy | opencv_contribに移動 |
contrib | opencv_contribに移動 |
表7 3.0では削除されたモジュール |
4.1.3 モジュール細分化
OpenCV 3.0ではOpenCV 2.4.xにあったモジュールのうち、一部のモジュールが、機能ごとに細分化されています。そのため、OpenCV 2.4.xのコードを3.0でも流用する場合は注意が必要です。
モジュール名(2.4.x) | モジュール名(3.0) | 細分化の概要 | ||
highgui | highgui | GUI(ウィンドウ表示) | 左記のように、機能ごとにモジュールが細分化 | |
imgcodecs | 画像ファイル入出力 | |||
videoio | 動画ファイルの入出力、カメラキャプチャ | |||
gpu | cudaarithm | (※各機能の説明は割愛) | 機能ごとにモジュールが細分化 | |
cudabgsegm | ||||
cudacodec | ||||
cudafeatures2d | ||||
cudafilters | ||||
cudaimgproc | ||||
cudalegacy | ||||
cudaobjdetect | ||||
cudaoptflow | ||||
cudastereo | ||||
cudawarping | ||||
cudev | ||||
表8 3.0では機能ごとにモジュールが細分化された |
4.2 高速化
ここでは高速化に関するOpenCV 3.0の変更点についてまとめます。
4.2.1 T-API
OpenCV 3.0から「T-API(Transparent API)」と呼ばれるOpenCLを用いたアクセラレーションレイヤーが追加されました。これは、動作環境上でOpenCLが利用できることを検出した場合にはOpenCL実装を用いることで高速化を図る機能です。
図6は、「CVPR 2015チュートリアル資料(英語)」で紹介されているT-APIの計測結果です。この結果より、T-API(OpenCL)を用いることで高速化できることが分かります。※ただし、計測環境によって効果は異なるので参考程度とした方がよいでしょう。
4.2.2 IPPICV
OpenCV 3.0からIntel IPPのサブセットであるIPPICVによって高速化されています。IPPICVは商用・非商用問わず無料で利用できます。利用する際には、ライセンス文書を参照してください。
図7は、「CVPR 2015チュートリアル資料」で紹介されているIPPICVを用いた場合の計測結果です。この結果から、IPPICVを用いることで高速できていることが分かります。※ただし、計測環境によって効果は異なるので参考程度とした方がよいでしょう。
4.2.3 HAL(Hardware Acceleration Layer)
OpenCV 3.0からハードウェア機能(SSE2、AVX、NEON)を用いた最適化の実装をhalモジュールとして提供しています。OpenCV 3.0時点では一部の機能しか実装されていませんが、OpenCV 3.1以降で実装が拡充される予定のようです。
また、OpenCV 2.4.x系では、NEONによる最適化があまり行われてきていなかったため、iOSやAndroidデバイス上でパフォーマンスが発揮できない課題がありましたが、OpenCV 3.x系からはhalモジュールなどの導入により改善される見込みです。
4.3 その他
4.3.1 ドキュメント
2.4系ではSphinxを用いてドキュメントが作成されていましたが、OpenCV 3.0からのドキュメント(英語)は、Doxygenを用いて作成されるようになりました。
4.3.2 バージョン番号
2.4系ではバージョン番号が2.4.9、2.4.10というように3桁で構成されていましたが、3.0からは、バージョン番号が3.0、3.1というように2桁で構成されるようになるようです。
5. オンラインドキュメント
最後にOpenCVを用いる際に有益な情報がまとまったWebサイトを紹介します。
5.1 公式
5.2 非公式
環境構築
C++
Pythonインターフェース
Tips
Copyright© Digital Advantage Corp. All Rights Reserved.