OpenCV v1tov2 - eiichiromomma/CVMLAB GitHub Wiki

(OpenCV) v1 to v2

include/opencv/cv.h等の従来使われてきたヘッダの廃止

ビルドエラー

モジュール化に伴いcv.hには以下の記述が入り、環境によってはopencv2以下のヘッダがnot foundでビルドが停止する場合がある。

CV_WARNING("This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module")
#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/objdetect/objdetect.hpp"

移行方法

ヘッダファイル(Windows)

INSTALLプロジェクト

SVN版ではINSTALLプロジェクトを実行するとinclude以下に各モジュールのヘッダファイルが、lib以下に各モジュールのライブラリファイルがコピーされる。 あとはLinux, OSXと同様。

INSTALLプロジェクトを実行しない場合

opencv2フォルダはmodulesのcalib3d, contrib, core, features2d, highgui, imgproc, legacy, ml, objdetect, videoに存在する。 includeに一纏めにされていたものがモジュール化に伴いバラバラに配置されたので、いちいちインクルードパスを指定しなければならない。 プロジェクト単位ではなく、VisualStudioのオプションのVC++ディレクトリで指定するのがスマートかも。

c:\OpenCV_SVNにインストールしてある場合、以下のインクルードパスを指定する

c:\OpenCV_SVN\modules\calib3d\include
c:\OpenCV_SVN\modules\core\include
c:\OpenCV_SVN\modules\features2d\include
c:\OpenCV_SVN\modules\highgui\include
c:\OpenCV_SVN\modules\imgproc\include
c:\OpenCV_SVN\modules\legacy\include
c:\OpenCV_SVN\modules\ml\include
c:\OpenCV_SVN\modules\objdetect\include
c:\OpenCV_SVN\modules\video\include
c:\OpenCV_SVN\modules\contrib\include

これで従来のソースはそのままビルド出来るが、include/opencv以下のインクルードファイルは今後廃止される可能性が高い。 cv.h, highgui.hを使っていた場合はC++の場合

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

のような指定になる。coreはどのみち下の2つからincludeされるので無くても問題無い。

ヘッダファイル(Mac OS XとUbuntu)

/usr/local/include/opencv2以下にモジュール名のディレクトリが配置されている。 /usr/local/includeにヘッダ検索パスが通っていれば

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

で良い。

ライブラリ(Windows)

opencv_モジュール名+バージョンという命名になったらしく、cv2??.lib, cxcore2??.lib, highgui2??.libを使っていた場合は

#ifdef _DEBUG
  #pragma comment( lib, "opencv_imgproc211d.lib" )
  #pragma comment( lib, "opencv_core211d.lib" )
  #pragma comment( lib, "opencv_highgui211d.lib" )
#else
  #pragma comment( lib, "opencv_imgproc211.lib" )
  #pragma comment( lib, "opencv_core211.lib" )
  #pragma comment( lib, "opencv_highgui211.lib" )
#endif

のような感じになる。

ライブラリ(Mac OS X)

/usr/local/libを覗くと分かるが libopencv_modulename.dylibとなる。バージョン番号の付いているdylibファイルへのシンボリックリンクになっているので、バージョンアップにも対応出来るよう、番号の付いていない方をリンクする。

て作成したOpenCV Frameworksに

libopencv_core.dylib
libopencv_imgproc.dylib
libopencv_highgui.dylib

を追加する。

ライブラリ(Ubuntu)

ライブラリ名はMacと同様。リンカへのオプションは

-lopencv_core -lopencv_imgproc -lopencv_highgui

のようにする。