OpenCV2.1からOpenCV2.2の変更点(ChangeLog)
オリジナルは http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs#A2.2
(2010年 12月)
一般的な変更点および改良点
- ライブラリが再編成されました.cxcore,cv,cvaux,highgui および ml は,より細かい複数のモジュールに分割されています:
- opencv_core – 基本機能(基本構造体,算術および線形代数演算,離散フーリエ変換,XMLおよびYAML入出力 …).
- opencv_imgproc – 画像処理(フィルタ,ガウシアンブラー,収縮・膨張,リサイズ,リマップ,色変換,ヒストグラム計算など).
- opencv_highgui – GUI および, 画像とビデオの入出力.
- opencv_ml – 統計的機械学習モデル(SVM,決定木,ブースティングなど).
- opencv_features2d – 2次元特徴検出器およびディスクリプタ(SURF,FASTなど.また,新機能である,検出器-ディスクリプタ-matcher のフレームワークが含まれます).
- opencv_video – モーション解析および,オブジェクトトラッキング(オプティカルフロー,モーションテンプレート,背景差分).
- opencv_objdetect – 画像からのオブジェクト検出(Haar & LBP 顔検出器,HOG人検出器など).
- opencv_calib3d – カメラキャリブレーション,ステレオ対応点探索,3次元データ処理の基本機能
- opencv_flann – the Fast Library for Approximate Nearest Neighbors (FLANN 1.5) および,そのOpenCVラッパー
- opencv_contrib – 提供されたコードのうち,未だ未成熟なもの
- opencv_legacy – 後方互換性のために残っている,サポートされなくなったコード
- opencv_gpu – OpenCV の機能の CUDA による高速化(比較的不安定,OpenCVで非常に活発に開発が進んでいる部分)
もし,CMakeやpkg-config ツールを利用して,OpenCVの検出やmakeスクリプトの設定を行っていた場合は,何の変更もなく以前のコードをビルドすることができる可能性が高いです.
そうでない場合,リンカパラメータを修正して(ライブラリ名を変更してください),インクルードパスを更新する必要があるでしょう.
まだ,#include <cv.h> などを使うこともできますが,以下が推奨される書き方です:
#include "opencv2/imgproc/imgproc.hpp" ..
C および C++ のサンプル (https://code.ros.org/svn/opencv/trunk/opencv/samples) は,新形式のヘッダをインクルードしてますのでチェックしてみてください.
- 現在の新形式のラッパーは,OpenCV 2.x API のより多くの部分をカバーしています.ドキュメントやサンプルも後々追加されます.また,追加機能を使いたい場合は,numpy が必要になります.SWIG-ベースのPythonラッパーは,完全に除外されました.
- Ethan Rublee の貢献によって,現在のOpenCV は Android 用にビルド可能で,サンプルもいくつか付属します(GSoC 2010 プロジェクト). http://opencv.willowgarage.com/wiki/Android をチェックしてください.
- opencv_gpu 高速化モジュールは,NVidia のサポートによって作成されました.詳細は,後述します.
-
新機能,特徴
- core:
- 固定型,固定サイズの行列に対する cv::Matx 型が追加されました.現在の Vec は,Matx から派生します.このクラスは,cv::Mat を使うとオーバヘッドが大きすぎるような,極小さい行列に対して利用されます.Matx と Mat は相互変換が可能です.
- cv::Mat および cv::MatND は,同じ型になりました:typedef cv::Mat cv::MatND.しかし,行列の次元をチェックしていない関数が,まだ多数あります.なので,OpenCVで 3-,4- … 次元の行列を処理する場合には注意してください.
- Eigen 2.x/3.x が実験的にサポートされています(CMake の WITH_EIGEN2 オプション).ここでも,Eigen2 の行列と cv::Mat と相互に変換できます. modules/core/include/opencv2/core/eigen.hpp を参照してください.
- “<<” オペレータで cv::Mat を表示することができます.opencv/samples/cpp/cout_mat.cpp を参照してください.
- SSE2 による最適化で cv::exp および cv::log が,かなり高速化されました.
- imgproc:
- 色変換関数が書き直されました;
- RGB->Lab および RGB->Luv のパフォーマンスが著しく改善されました.現在の関数は,入力に sRGB 色空間(例えば,gamma=2.2)を仮定しています.オリジナルの線形変換 RGB->L** を行いたい場合,CV_LBGR2LAB などを利用してください.
- Bayer->RGB を行う VNG アルゴリズムが追加されています.これは単純な補間アルゴリズムと比べると遅いですが,非常に精細な画像を返します.
- 8-bit 画像に対する,新しい種類の RGB->HSV/HLS 変換関数が追加されました.これは,H チャンネルとして,0…179 ではなく 0..255 の範囲全体を利用します.変換用のコードは CV_RGB2HSV_FULL などです.
- 広角カメラ用に, initUndistortRectifyMap の特別なバージョンが追加されました:initWideAngleProjMap()
- 色変換関数が書き直されました;
- features2d:
- キーポイント抽出,ディスクリプタ計算,それらのマッチングに関する統合的フレームワークが導入されました.以前のものに加えて,SURF や FAST,StarDetector などの新しい検出器,ディスクリプタが,このフレームワークを介して利用できるようにラップされています.新しいフレームワークの利点は(異なる検出器やディスクリプタを扱う統合的なAPIとなることに加えて),画像のマッチング,およびテクスチャ付きオブジェクトの検出における高度なツールをも提供する点にあります.ドキュメント http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html ,および C++ のサンプルを見てください:
- descriptor_extractor_matcher.cpp – キーポイントとそのディスクリプタを利用して,シーンからオブジェクトを検出します.
- generic_descriptor_matcher.cpp – 上記サンプルのバリエーション.ディスクリプタを明示的に計算する必要の無いバージョンです.
- bagofwords_classification.cpp – フレームワークを拡張するサンプル.それを利用して,VOCデータベースのデータを処理します: http://pascallin.ecs.soton.ac.uk/challenges/VOC/
- Michael Calonder の最新の超高速キーポイントディスクリプタ BRIEF が,Ethan Rublee によって統合されました.サンプルを参照してください opencv/samples/cpp/video_homography.cpp
- SURF キーポイント検出器が,TBBによって並列化されました(imahon と yvo2m のパッチ)
- キーポイント抽出,ディスクリプタ計算,それらのマッチングに関する統合的フレームワークが導入されました.以前のものに加えて,SURF や FAST,StarDetector などの新しい検出器,ディスクリプタが,このフレームワークを介して利用できるようにラップされています.新しいフレームワークの利点は(異なる検出器やディスクリプタを扱う統合的なAPIとなることに加えて),画像のマッチング,およびテクスチャ付きオブジェクトの検出における高度なツールをも提供する点にあります.ドキュメント http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html ,および C++ のサンプルを見てください:
- objdetect:
- Nizhniy Novgorod State University (NNSU) のチームによる,P. Felzenszwalb のアルゴリズムを実装した LatentSVM オブジェクト検出器. opencv/samples/c/latentsvmdetect.cpp を参照してください.
- calib3d:
- 新しい半径方向歪みモデル:
x' = x*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <xの接線方向歪み>, y' = y*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <yの接線方向歪み>
が導入されました.広角レンズのカメラをキャリブレーションする場合に役立ちます.最適化するパラメータが増えたので,それらすべてをロバストに推定するには,より多くのデータを与える必要があります.あるいは,単純に歪みベクトルを0で初期化してから,CV_CALIB_RATIONAL_MODEL + CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5 や,特定の係数を有効/無効にするその他の組み合わせフラグを渡す方法もあります.
-
- 一列に並んだ3眼カメラの平行化関数が追加されました.samples/cpp/3calibration.cpp を参照してください.
- ml:
- NNSU チームによる Gradient boosting trees モデル.
- highgui:
- GSoC 2010 プロジェクトの成果として(完成させたのは Yannick Verdie),OpenCVにQtバックエンドが追加されました.このバックエンドには,その他のバックエンドには存在しない追加機能があります.TTFフォントを利用したテキストレンダリング,分離型の「コントロールパネル」,プッシュボタン,チェックボックスとラジオボタン,highgui ウィンドウに表示された画像のインタラクティブな拡大・移動機能,「名前をつけて保存」などです.Yannic が新機能をデモするYoutube ビデオをチェックしてみてください:http://www.youtube.com/user/MrFrenchCookie#p/u
新しいAPIの説明はここにあります: http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html .新しいAPIを使えるようにするには,Qt SDK(または,libqt4 の開発パッケージ)をマシンにインストールして,OpenCVでQtをサポートするように(CMake に -DWITH_QT=ON を渡して,GUIバックエンドとしてQtが使われるようになったことを確認してください)ビルドする必要があります.
- GSoC 2010 プロジェクトの成果として(完成させたのは Yannick Verdie),OpenCVにQtバックエンドが追加されました.このバックエンドには,その他のバックエンドには存在しない追加機能があります.TTFフォントを利用したテキストレンダリング,分離型の「コントロールパネル」,プッシュボタン,チェックボックスとラジオボタン,highgui ウィンドウに表示された画像のインタラクティブな拡大・移動機能,「名前をつけて保存」などです.Yannic が新機能をデモするYoutube ビデオをチェックしてみてください:http://www.youtube.com/user/MrFrenchCookie#p/u
-
- 16-bit および LZW-圧縮された TIFF がサポートされるようになりました.
- LinuxでIEEE1394カメラのモードを設定することができるようになりました.
- contrib:
- Marius Muja, Antonella Cascitelli, Marco Di Stefano および Stefano Fabri による Chamferマッチングアルゴリズム.samples/cpp/chamfer.cpp を参照してください.
- gpu:
- NVidia のサポートによって作成された,OpenCVの完全な新機能です.このパッケージはアルファ,または初期ベータ段階のものなので,注意して利用するとともに,OpenCV SVN をチェック更新を確認するようにしてください.
利用するためは,最新の NVidia CUDA SDK をインストールして,OpenCVでCUDAをサポートするように(CMake の -DWITH_CUDA=ON フラグ)ビルドする必要があります.すべての機能は,cv::gpu 名前空間にあります.
関数およびクラスの完全な一覧は, opencv/modules/gpu/include/opencv2/gpu/gpu.hpp を参照してください.ここでは,APIの主要なコンポーネントを挙げます:- 画像計算,フィルタリング処理,モルフォロジー,幾何学変換,ヒストグラム,
- 3眼ステレオ対応点探索アルゴリズム:ブロックマッチング,Belief Propagation,定数空間におけるBelief Propagation.
- HOG-ベースのオブジェクト検出器.CPUバージョンと比べると桁違いに高速です! opencv/samples/cpp/ を参照してください.
- NVidia のサポートによって作成された,OpenCVの完全な新機能です.このパッケージはアルファ,または初期ベータ段階のものなので,注意して利用するとともに,OpenCV SVN をチェック更新を確認するようにしてください.
- Pythonバインディング:
- 現在のPythonバインディングは,OpenCV 2.x の機能のより多くをカバーするにようになりました.この新しいラッパーでは,numpy をインストールする必要があります(詳しくは http://opencv.willowgarage.com/wiki/InstallGuide を参照してください).
C++ API と同様に,新しい Python バインディングでは,出力配列を確保する必要はありません.関数によって自動的に作成されます.例を示します:
- 現在のPythonバインディングは,OpenCV 2.x の機能のより多くをカバーするにようになりました.この新しいラッパーでは,numpy をインストールする必要があります(詳しくは http://opencv.willowgarage.com/wiki/InstallGuide を参照してください).
import cv a=cv.imread("lena.jpg",0) b=cv.canny(a, 50, 100, apertureSize=3) cv.imshow("test",b) cv.waitKey(0)
このサンプルでは,a と b が通常の numpy の配列になっており,OpenCVの機能と一緒に numpy と scipy のパワーを余すことなく利用できます.
-
ドキュメント,サンプル
- 各関数の説明に wiki ページへのリンクが追加されました.http://opencv.willowgarage.com を参照してください.
- すべてのサンプルに説明文が記載されています.また,新しいOpenCV API を利用するため,大部分のサンプルが C++ に変更されました.
-
バグフィックス
- 300以上の問題が解決されています.この問題の大半は(closed または,まだ open な状態ものも含め), https://code.ros.org/trac/opencv/report/6 で見ることができます.
- 現在,更新のために,古いバグトラッカー https://sourceforge.net/projects/opencvlibrary/ は閉じられています.現在も関係するバグレポートは,できるだけ早く code.ros.org に移動され,古いバグトラッカーは完全に削除される予定です.これからは新しいトラッカーを利用してください.
-
既知の問題/制限
- 現在のWindows用のインストールパッケージは32-bitのみで,TBBサポートを含みません.並列化した,あるいは64-bitバージョンのOpenCVは,ソースコードからビルドすることができます.
- その他のバグは, http://code.ros.org/trac/opencv/report/1 に一覧があります.