0 はじめにやること
Windowsでの開発環境構築についてのまとめ ※Ver. 1.x環境
ビルド環境のインストール
VisualC++ 2008のインストール
Windows/VisualC/2008を参照。 基本的な動作に必要なPlatform SDKは含まれている。
VisualC++ 2005のインストール(旧情報)
コンパイラが無いと話にならないので、持ってない場合はWindows/VisualC/Installを参照。
Platform SDKのインストール(Visual C++ 2005のみ)
highgui.hがwindows.hを必要とするので、ウィンドウを開くアプリケーションはPlatform SDKが必須となる。
詳細はPlatform SDK参照
インストール先はCustomインストールでC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\にしておく。
OpenCV一式のインストール
配布元からインストーラ(opencv-win)を拾ってきて実行するだけ。 パスの指定も勝手にやってくれる。
インクルードファイルパスの指定
VCでのインクルードパスの追加を参照のこと
正規の方法
以下のフォルダをインクルードファイルパスで指定する
cv\include cvaux\include cxcore\include otherlibs\cvcam\include otherlibs\highgui ml\include
変則的なやり方
ヘッダファイル(*.h, *.hpp)とライブラリファイル(*.lib)はOpenCVのフォルダ以下に散り散りになってしまっていて、後々の扱いが面倒なので一箇所にコピーしてしまう。 (但しバージョンアップの際に旧バージョンが残らないように注意する必要がある) ※好みの問題もあるので嫌な人は、↑の正規の方法でインクルードパスを指定する。
ヘッダファイルは以下のフォルダの.hと.hppをコピーする。
cv\include cvaux\include cxcore\include otherlibs\cvcam\include otherlibs\highgui ml\include
ヘッダファイルはそれぞれ必要に応じてincludeする。ライブラリはヘッダファイルに応じてWindows/VisualC/プロジェクトへのライブラリの追加を参照して追加する。
- cv.h: OpenCVの核となるヘッダ(必須)
- cvaux.h: 実験的機能
- cvcam.h: カメラを扱う
- highgui.h: ウィンドウなどのGUI
VCでのインクルードパスの追加を参照してC:\Program Files\OpenCV\includeを追加。
ライブラリファイルパスの指定
ライブラリファイルはC:\Program Files\OpenCV\libに入っているので、VCでのライブラリパスの追加を参照してC:\Program Files\OpenCV\libを追加。
OpenCVを使ったアプリケーションを他のマシンで動かす場合
当然だが開発した環境ではすんなり動くが、ほかの環境だとOpenCVのdllとmsvcvr90.dllが無いと言われて動かない。 OpenCVのdllはインストール先のbinフォルダに.dllファイルがあるので作成した.exeファイルと一緒に置くと良い。 msvcrXXはマイクロソフトで再頒布可能ファイルとして配っているので拾ってインストールする。
msvcrXX.dllのランタイムエラーを防ぐには
スマートな方法
プロジェクトのプロパティの[リンカ]-[マニフェストファイル]-[追加のマニフェスト依存関係]に以下の内容を追加する。
type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'
バージョン等はdllの置いてある
C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375
のようなフォルダ名に対応している。
msvcr80の場合は下の旧情報を参考にバージョンを変えて設定すると、manifestファイルを作ったりdllを置く必要がなくなる。
旧情報
以下の内容のファイルをMicrosoft.VC80.CRT.manifestとしてdllと共にプログラムと同じフォルダにおく必要がある。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright c 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable/>
<assemblyIdentity
type="win32"
name="Microsoft.VC80.CRT"
version="8.0.50608.0"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"
/>
<file name="msvcr80.dll"/>
<file name="msvcp80.dll"/>
<file name="msvcm80.dll"/>
</assembly>