連載
» 2015年07月27日 05時00分 公開

OpenCV入門【3.0対応】:第1回 OpenCVとは? 最新3.0の新機能概要とモジュール構成 (2/2)

[@dandelion1124,著]
前のページへ 1|2       

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)を用いることで高速化できることが分かります。ただし、計測環境によって効果は異なるので参考程度とした方がよいでしょう。

T-APIによる高速化 図6 T-APIによる高速化(「CVPR 2015チュートリアル資料」から引用)

4.2.2 IPPICV

 OpenCV 3.0からIntel IPPのサブセットであるIPPICVによって高速化されています。IPPICVは商用・非商用問わず無料で利用できます。利用する際には、ライセンス文書を参照してください。

 図7は、「CVPR 2015チュートリアル資料」で紹介されているIPPICVを用いた場合の計測結果です。この結果から、IPPICVを用いることで高速できていることが分かります。ただし、計測環境によって効果は異なるので参考程度とした方がよいでしょう。

IPPICVによる高速化

図7 IPPICVによる高速化(「CVPR 2015チュートリアル資料」から引用)


4.2.3 HAL(Hardware Acceleration Layer)

 OpenCV 3.0からハードウェア機能(SSE2AVXNEON)を用いた最適化の実装を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.92.4.10というように3桁で構成されていましたが、3.0からは、バージョン番号が3.03.1というように2桁で構成されるようになるようです。

5. オンラインドキュメント

 最後にOpenCVを用いる際に有益な情報がまとまったWebサイトを紹介します。

5.1 公式

5.2 非公式

環境構築

C++

Pythonインターフェース

Tips

「OpenCV入門【3.0対応】」のインデックス

OpenCV入門【3.0対応】

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。