2008年10月25日にCVSから入手したOpenCVのソースをビルドする(勝利)
入手したソースは OpenCV 1.1 に相当する.
開発環境
OS | Windows XP Pro SP3 |
---|---|
IDE | Visual C++ 2008 Express Edition (64ビットサポートは外した) |
Windows SDK | Web インストーラ版または ISOイメージ版を入手して導入 |
DirectX SDK | DirectX SDK - March 2008(実のところは不要かもしれない) |
OpenCV | OpenCV_1.1pre1a.exe |
OpenCV CVS | TortoiseCVSを使って最新のOpenCVを入手する - BiBoLoG参照 |
Windows SDK 導入メモ
導入後,c:\ 直下にゴミファイルが残っていた.ひとまず削除して,問題があったら戻す.c:\data\wsdktrash.lzh に固めておいた.問題がないようなので消した.
eula.1028.txt eula.1031.txt eula.1033.txt eula.1036.txt eula.1040.txt eula.1041.txt eula.1042.txt eula.2052.txt eula.3082.txt globdata.ini install.exe install.ini install.res.1028.dll install.res.1031.dll install.res.1033.dll install.res.1036.dll install.res.1040.dll install.res.1041.dll install.res.1042.dll install.res.2052.dll install.res.3082.dll vcredist.bmp VC_RED.cab VC_RED.MSI
プロジェクトの設定
_make\opencv.vs2005.slnをVS2008形式に変換して開く.cv および cxcore プロジェクトを選択し,プロパティページを開く.Debug,Release 両構成について編集する.
「すべての構成」で編集していると,cv プロジェクトで必要な cxcored.lib,cxcore.lib の依存記述を消してしまうから,面倒でも Debug,Release 各構成で編集するという2度手間を取る.
ソースファイルの調整
cvcompat.h 757行目を手で打ち直し,削除する.現在のコードページ(932)だとか Unicode 形式で保存してください だとか言う warning を回避できる.
int CV_UNREFERENCED(interpolate) )
デバッグ用 OpenMP を用意できていないので,デバッグビルド時に omp.h を読み込むとき,_DEBUG を流したくない.cxmisc.h に次のような記述がある.
#ifdef _OPENMP #include "omp.h" #endif
これを先に述べたとおり書き換える.
#ifdef _OPENMP #ifdef _DEBUG #undef _DEBUG #include "omp.h" #define _DEBUG #else #include "omp.h" #endif #endif /* _OPENMP */
cvaux.h で文字化けが発生している.1167行目を手で打ち直して改める.
CvMemStorage* storage; /*storage for foreground_regions*/ \
ビルド
メニューバー>ビルド>バッチビルドからプラットフォームが Win32 であるもののみを選択し,ビルドを実施する.
結果
成功した.デバッグビルドログの一部を示す.
1>zlib - エラー 0、警告 0 3>libpng - エラー 0、警告 0 2>cxcore - エラー 0、警告 0 5>libjpeg - エラー 0、警告 0 4>libtiff - エラー 0、警告 1 6>libjasper - エラー 0、警告 54 7>cv - エラー 0、警告 3 8>cxts - エラー 0、警告 0 9>ml - エラー 0、警告 0 11>highgui - エラー 0、警告 2 10>cvaux - エラー 0、警告 7 12>cvsample - エラー 0、警告 0 14>cxcoretest - エラー 0、警告 0 13>cvtest - エラー 0、警告 0 ========== ビルド: 14 正常終了、0 失敗、0 更新不要、0 スキップ ==========
リリースビルドログの一部を示す.
1>zlib - エラー 0、警告 0 3>libpng - エラー 0、警告 0 4>libtiff - エラー 0、警告 0 5>libjpeg - エラー 0、警告 0 6>libjasper - エラー 0、警告 0 2>cxcore - エラー 0、警告 0 8>cxts - エラー 0、警告 0 9>ml - エラー 0、警告 0 10>highgui - エラー 0、警告 1 11>cxcoretest - エラー 0、警告 0 7>cv - エラー 0、警告 3 13>cvsample - エラー 0、警告 0 12>cvaux - エラー 0、警告 7 14>cvtest - エラー 0、警告 0 ========== ビルド: 14 正常終了、0 失敗、0 更新不要、0 スキップ ==========
使用テスト
http://chihara.naist.jp/opencv/?%C6%B0%B2%E8%A5%D5%A5%A1%A5%A4%A5%EB%A1%CAavi%A5%D5%A5%A1%A5%A4%A5%EB%A1%CB%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF を実行した.IR45 な AVI 動画を再生できた.
心配
JPEG2000 を扱うための第6プロジェクト libjasper のデバッグビルドが不完全と思われる.
6>.\jpc_tsfb.c(124) : warning C4013: 関数 'jpc_tsfb_analyze2' は定義されていません。int 型の値を返す外部関数と見なします。 6>.\jpc_tsfb.c(151) : warning C4013: 関数 'jpc_tsfb_synthesize2' は定義されていません。int 型の値を返す外部関数と見なします。 6>.\jpc_t1dec.c(243) : warning C4013: 関数 'jas_eprintf' は定義されていません。int 型の値を返す外部関数と見なします。 6>.\jas_getopt.c(129) : warning C4013: 関数 'jas_eprintf' は定義されていません。int 型の値を返す外部関数と見なします。