OpewnCV3.1対応の記事を改めて書きました。
OpenCV3.1の導入withCMake
そちらを御覧ください。
今回はOpenCVを導入します。というのも今高速でスクリーンショットを取るソフトを作ってるのですが、なんかOpenCV使った方がいいみたいなことを知恵袋で言われたので。
OpenCVとは
ざっというと画像処理に関するプログラミングを超強力にアシストしてくれるライブラリーです。詳細は
http://www.buildinsider.net/small/opencv/01
に譲ります。(なんで対応画像形式にppmの表記を省くの・・・)
追記<br/ > 記載漏れです。次回更新時に修正したいと思います。 <br/ > 2014-12-04(23:16) :dandelion<br/ > とのことです。 わざわざ有り難うございます。
目標
- CMakeを使ってWin32、x64両対応できるように導入する
環境
項目 | 内容 |
---|---|
OpenCVバージョン | OpenCV 2.4.9 |
Visual Studio | Visual Studio 2013 Express for Desktop Update4 |
ビルド構成 | Win32 or x64 | Debug or Release |
OS | Windows 7 Homr Premium(64bit) |
え、「Visual Studio Community 2013」?知らない子です
手順抜粋
ざっというと
- CMakeと、OpenCVのソースコード(zip)をDL
- CMakeでconfigureとGenerate
- Visual Studio 2013 ExpressでDebug or Release計2回ビルド
- 2に戻る。結果的には4回ビルドしてる
- includeとか設定
- テンプレート化
です。
なお、先ほど紹介したbuildinsiderの中の人がこれをバッチ化していらっしゃるのでそれを利用するのも手です(私はバッチいじるよりGUIをクリックする派なので検証はご遠慮させていただきます。)
CMakeによるソリューション生成とビルド用のバッチファイルを公開しているのでご参考ください。
https://gist.github.com/atinfinity/51ce4794d0254ab63328
2014-12-04(23:16) :dandelion
手順詳細
以下、
OpenCVの環境構築(OpenCV 2.4.9) - Build Insider
http://www.buildinsider.net/small/opencv/02
初めてのOpenCV開発 ― Visual Studio/CMake/NuGetでプロジェクト作成【OpenCV 2.4.9】
http://www.buildinsider.net/small/opencv/03
cappriciosso: OpenCV 2.3.1の開発環境をVisual Studio 2010で構築する(Windows 7 Ultimate 64bit)
http://entropiajp.blogspot.jp/2012/05/opencv-231visual-studio-2010windows-7.html
OpenCV Ver.2.4.9 をインストールする|りさーちゃーのたまご
http://ameblo.jp/morimoridiary/entry-11857524071.html
OpenCV2.3の入手、ダウンロード、インストール、環境設定 | イメージングソリューション
http://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/
を参照しつつ見てください。
- CMakeをダウンロードする
http://www.cmake.org/download/
よりLatest Releaseのものを落とす。今回は「cmake-3.0.2-win32-x86.zip」 - OpenCVのソースコード(zip版)を落とす。
https://github.com/Itseez/opencv/releases
今回は「opencv-2.4.9.zip」 - 2つとも解凍し、
C:\lib\
にフォルダーごと入れる - C:\lib\cmake-3.0.2-win32-x86\bin
のcmake-gui.exeを管理者権限で実行する。こうしないとまれにCMakeがこけるらしい。<br/ >いやね、dandelion氏のご指摘通りそんなことしなくてもいいとは思うんだけど、見かけたのが管理者権限が必要なところにファイルを出力してないのにエラーがあったみたいな話だったような気がするので(どこだ、見つからない・・・)。 - 順に
C:/lib/opencv-2.4.9C:/lib/opencv-2.4.9\build
と入力、configureする。
Generator(コンパイラー)選択は画像の通り。最終的にWin64がついてる奴とそうでない奴両方やるが、とりあえず「Visual Studio 12 2013 Win64」を選択。
「CMAKE_CXX_FLAGS」のところに『"/DWIN32 /D_WINDOWS /W3 /GR /EHa /Zm150" 』みたいに「/EHa 」を指定する必要があるそうです(MaverickTse氏指摘)
「WITH_CUDA」のチェックはなんとなくつけたまま。
「WITH_CUDA」のビルドの長さについての考察は
OpenCV2.4.10.1のビルド - AkiWiki---CUDAのアーキテクチャを指定した場合 <br/ > 参照。<br/ > 設定を変更するときは変更後必ず再度configureする。 -
Generateをクリック。Policy CMP0026が云々が出てきても気にしない。
- C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets
のアクセスコントロールを全ユーザーでフルコントロールに
これしないとビルドエラーで怒られた。あともう一箇所アクセスコントロールをいじんなきゃいけなかったんだけどどこだっけ・・・。友人のPCので実験したらそんなことならなかったんだけどなんでだろ。 - C:\lib\opencv-2.4.9\build
のOpenCV.slnをVisual Studioで開く。 - ソリューション、プラットフォーム構成がRelease|x64になっているか確認。
- ソリューションエクスプローラーでCMakeTargetsのINSTALLを右クリックしてスタートアッププロジェクトに設定し同じく右クリからビルド。
- Unicodeでソースを保存しなおせとかはすべてスルー。どうせコメント部分が引っかかってるんだろう。
エラーがでた時はもう一度CMakeTargetsのINSTALLを右クリックしてビルドするとさくっと通ることも。 - ソリューション、プラットフォーム構成がDebug|x64にして同様にビルド。
- cmake-gui.exeを管理者権限で実行、File→Delete Cacheをクリック。
- PC再起動。そのまま続けようとすると「C:\lib\opencv-2.4.9\cmake」にアクセス出来ないとかで怒られたので。これまた友人のPCで実験したら必要なかったんだけど。
- 手順5に戻る。今度は「Visual Studio 12 2013」を選択。同様にconfigure、Generate。
- OpenCV.slnをVisual Studioで開き、ソリューション、プラットフォーム構成がRelease|WIn32になっているか確認、同様にビルド。
- ソリューション、プラットフォーム構成がDebug|WIn32になっているか確認、同様にビルド
- 環境変数への追加を普通はやるがここでは別の方法を取る。
C:\lib\opencv-2.4.9\build\install\x86\vc12\bin以下のファイルすべて
を
C:\Windows\SysWOW64
にコピー。
C:\lib\opencv-2.4.9\build\install\x64\vc12\bin以下のファイルすべてを
を
C:\Windows\System32
にコピー。
まちがって逆にしないこと。 - C:\lib\opencv-2.4.9\build\install
以外は単純にライブラリを使うだけであれば消してもいいが、別に空き容量に困ってるわけではないので放置する。 - 適当に「opencvsample1」とかいう名前でコンソールアプリケーションを作り―の
http://www.buildinsider.net/small/opencv/03
の「2.2 新規プロジェクト作成(64bitアプリケーションの場合)」をやる。ソースファイルはまだいらない。 - ソリューションエクスプローラーでプロジェクトを選択してる状態でプロジェクト→プロパティとクリックする
- 構成:すべての構成
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→C/C++→全般→追加のインクルードディレクトリに
C:\lib\opencv-2.4.9\build\install\include
を追加、適用を押す - 構成:Debug
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→リンカー→入力→追加の依存ファイル→入力欄クリック→右側の下矢印をクリック→編集で
opencv_core249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_objdetect249d.lib
を追加する - 構成:Release
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→リンカー→入力→追加の依存ファイル→入力欄クリック→右側の下矢印をクリック→編集で
opencv_core249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_objdetect249.lib
を追加する - 構成:すべての構成
プラットフォーム:x64
の状態で
構成プロパティ→リンカー→全般→追加のライブラリーディレクトリで
C:\lib\opencv-2.4.9\build\install\x64\vc12\lib
を追加 - 構成:すべての構成
プラットフォーム:Win32
の状態で
構成プロパティ→リンカー→全般→追加のライブラリーディレクトリで
C:\lib\opencv-2.4.9\build\install\x86\vc12\lib
を追加 - プロパティページを閉じる
- ファイル→テンプレートのエクスポートで
プロジェクトテンプレート→
テンプレート名「OpenCV_core_win32_x64_Console」
テンプレートの説明「http://www.buildinsider.net/small/opencv/03」
アイコンのイメージ:適当に↓とか
http://www.laganiere.name/img/opencv.bmp
で完了を押す。
- 多分導入完了
確認
さっきのプロジェクトにソースファイルを追加して
#include <opencv2/core/core.hpp> // coreモジュールのヘッダーをインクルード #include <opencv2/highgui/highgui.hpp> // highguiモジュールのヘッダーをインクルード #include <iostream> int main(int argc, const char* argv[]) { // 1幅320px、高さ240pxで赤色の画像データを生成 cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255)); // 2画像表示用のウィンドウを生成 cv::namedWindow("red", cv::WINDOW_AUTOSIZE); // 3ウィンドウに画像を表示 cv::imshow("red", redImg); // 4キー入力を待機 cv::waitKey(0); // 5作成したウィンドウを全て破棄 cv::destroyAllWindows(); return 0; }
と入力、全4パターンビルドしてみる。私の場合はなぜかDebug|Win32の時だけウィンドウタイトルの文字が文字化けする。なんで?
メモ
コメント欄にて
2> float-point model: fast OCV3 use float-point model=fast instead of the default "precise", so in your own project, there's not much point using the default "precise". Change it to "fast" to crank out a bit performance
というご指摘を頂いた。これは2.x系でもライブラリのビルド時、およびライブラリを利用したプログラムのビルド時双方で、float-point model=fastを使え、ということなのだろうか。なんかよくわからない・・・。 ちなみにfloat-point model=fastっていうのはプロジェクトのプロパティ→構成プロパティ→C/C++→すべてのオプション→浮動小数点モデル のことだと思う(あってるかな?)。