OpenCV の使い方 本文へジャンプ

OpenCV を使ったプログラムの作成(1)

ここでは、Visual C++ におけるプロジェクトの作成から、OpenCV に付随したサンプルプログラムのビルドと実行までを示す。

[1] フォルダの移動
OpenCV のサンプルプログラムを集めたフォルダ samples\c に移動する(デフォルトでは C:\Program Files\OpenCV\samples\c)。


[2] Visual C++ の起動
「スタート」→「プログラム」→「Microsoft Visual C++ 2008 Expression Edition」から、Microsoft Visual C++ 2008 Expression Edition を起動する。




[3] 新規プロジェクト&ソリューションの作成
「ファイル」→「新規作成」→「プロジェクト」から、新しいプロジェクトとして、「Win32」→「Win32コンソールアプリケーション」を選択する。プロジェクト名は test とし、場所は C:\Program Files\OpenCV\samples を指定。



次のウィンドウが表示されたら、「次へ」を選択。



「追加のオプション」は「空のプロジェクト」にして「完了」。



test という名前の「プロジェクト」(と「ソリューション」)の作成完了。



ファイルの実体は、C:\Program Files\OpenCV\samples\test 以下に作成。*.sln がソリューションファイル、*.vcproj がプロジェクトファイル。




[4] 既存のソースプログラムの追加
test プロジェクトの「ソースファイル」を右クリックし、「追加」→「既存の項目」から、C:\Program Files\OpenCV\samples\c 以下のソースプログラム (*.c) を選択 (以下の例では dft.c)。そのファイル名をクリックすると、以下のようにプログラムエディタが開く。




[5] インクルードファイルのパスの指定
「ビルド」→「ソリューションのビルド」、もしくは「testのビルド」をクリックすると、プログラムのコンパイルが開始される(この例の場合、test という名前のソリューションに test という名前のプロジェクトが一つあるだけなので、「ソリューションのビルド」と「testのビルド」は同じ動作になる)。しかし、cxcore.h が無いよ、という以下のエラー表示を残して処理が終了する。



これらのエラーは、OpenCVのヘッダファイル群へのパスが通っていないためのコンパイルエラーである。

OpenCVのヘッダファイル群は
  • cv\include
  • cxcore\include
  • otherlibs\highgui
  • cvaux\include
  • otherlibs\_graphics\include
に分散して保存されている(特に最初の三つは重要)。そこで、「ツール」→「オプション」→「プロジェクトおよびソリューション」→「VC++ディレクトリ」を開き、「ディレクトリを表示するプロジェクト」として「インクルードファイル」を選択する。



青のライン上をクリックするとインクルードディレクトリの指定をするように求められるので、上記の五つのディレクトリを順に指定する(一度設定すれば、以降の再設定は不要)。



「OK」を押してビルドする。


[6] ライブラリファイルのパスの指定とライブラリファイルの指定
再度ビルドすると、「*.h が無いよ」というコンパイルエラーは無くなるが、新たに、次のような「外部参照が未解決です」というエラーが発生する。



これらのエラーは、必要なライブラリ関数がリンクされていないことによるリンクエラーである。

OpenCVのライブラリファイル群は、インクルードファイルとは異なり、(C:\Program Files\OpenCV\) lib 以下にまとめて格納されている。



そこでまず、インクルードファイルの場合と同様に、「ツール」→「オプション」→「プロジェクトおよびソリューション」→「VC++ディレクトリ」を開き、さらに「ディレクトリを表示するプロジェクト」として「ライブラリファイル」を選択する。そして、C:\Program Files\OpenCV\lib を追加して「OK」ボタンを押す(これも一回設定すれば、以降の再設定は不要)。



ライブラリファイルの場合、これだけではまだ不十分で、プロジェクトごとにリンクするライブラリファイルを指定する必要がある。このためには、まず test プロジェクトを右クリックし、「プロパティ」を選択し、「構成プロパティ」→「リンカ」→「入力」を選択する。そして、「追加の依存ファイル」のところで、
  • cv.lib
  • cxcore.lib
  • highgui.lib
の三つのライブラリファイルを明示的に指定する。



「OK」ボタンを押して、再再度ビルドする。今度はリンクエラーも消え、ビルドが正常終了する。




[7] プログラムの実行
「デバッグ」→「デバッグの開始」、あるいは「デバッグなしで開始」によってプログラムを実行する。しかし、ソースプログラムとして dft.c を用いた場合、何も表示されずにプログラムが終了する。これは、dft.c プログラム中で "lena.jpg" というファイル入力を前提としているにもかかわらず、現在のプロジェクトのフォルダ内に "lena.jpg" が存在しないため、プログラムが画像の読み込みに失敗し、強制終了したためである(以下の行の箇所)。

  im = cvLoadImage( filename, CV_LOAD_IMAGE_GRAYSCALE );
  if( !im )
   return -1;

よって、samples\c 以下にある lena.jpg を samples\test にコピーし、再度実行してみる。すると、プログラムは問題なく実行され、以下の画像が表示される。

  

左が lena.jpg の画像表示、右がその二次元DFTの結果表示である。