スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OpenCV 2.4.9導入-with CMake

OpewnCV3.1対応の記事を改めて書きました。
OpenCV3.1の導入withCMake
そちらを御覧ください。

今回はOpenCVを導入します。というのも今高速でスクリーンショットを取るソフトを作ってるのですが、なんかOpenCV使った方がいいみたいなことを知恵袋で言われたので。

OpenCVとは

ざっというと画像処理に関するプログラミングを超強力にアシストしてくれるライブラリーです。詳細は
http://www.buildinsider.net/small/opencv/01
に譲ります。(なんで対応画像形式にppmの表記を省くの・・・)

追記
記載漏れです。次回更新時に修正したいと思います。
2014-12-04(23:16) :dandelion
とのことです。 わざわざ有り難うございます。

目標

  • 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」?知らない子です

手順抜粋

ざっというと

  1. CMakeと、OpenCVのソースコード(zip)をDL
  2. CMakeでconfigureとGenerate
  3. Visual Studio 2013 ExpressでDebug or Release計2回ビルド
  4. 2に戻る。結果的には4回ビルドしてる
  5. includeとか設定
  6. テンプレート化

です。

なお、先ほど紹介した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/
を参照しつつ見てください。

  1. CMakeをダウンロードする
    http://www.cmake.org/download/
    よりLatest Releaseのものを落とす。今回は「cmake-3.0.2-win32-x86.zip
  2. OpenCVのソースコード(zip版)を落とす。
    https://github.com/Itseez/opencv/releases

    今回は「opencv-2.4.9.zip」
  3. 2つとも解凍し、
    C:\lib\
    にフォルダーごと入れる
  4. C:\lib\cmake-3.0.2-win32-x86\bin
    のcmake-gui.exeを管理者権限で実行する。こうしないとまれにCMakeがこけるらしい。
    いやね、dandelion氏のご指摘通りそんなことしなくてもいいとは思うんだけど、見かけたのが管理者権限が必要なところにファイルを出力してないのにエラーがあったみたいな話だったような気がするので(どこだ、見つからない・・・)。
  5. 順に
    C:/lib/opencv-2.4.9

    C:/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のアーキテクチャを指定した場合
    参照。
    設定を変更するときは変更後必ず再度configureする。

  6. Generateをクリック。Policy CMP0026が云々が出てきても気にしない。

  7. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets
    のアクセスコントロールを全ユーザーでフルコントロールに
    これしないとビルドエラーで怒られた。あともう一箇所アクセスコントロールをいじんなきゃいけなかったんだけどどこだっけ・・・。友人のPCので実験したらそんなことならなかったんだけどなんでだろ。
  8. C:\lib\opencv-2.4.9\build
    のOpenCV.slnをVisual Studioで開く。
  9. ソリューション、プラットフォーム構成がRelease|x64になっているか確認。
  10. ソリューションエクスプローラーでCMakeTargetsのINSTALLを右クリックしてスタートアッププロジェクトに設定し同じく右クリからビルド。
  11. Unicodeでソースを保存しなおせとかはすべてスルー。どうせコメント部分が引っかかってるんだろう。
    エラーがでた時はもう一度CMakeTargetsのINSTALLを右クリックしてビルドするとさくっと通ることも。
  12. ソリューション、プラットフォーム構成がDebug|x64にして同様にビルド。
  13. cmake-gui.exeを管理者権限で実行、File→Delete Cacheをクリック。
  14. PC再起動。そのまま続けようとすると「C:\lib\opencv-2.4.9\cmake」にアクセス出来ないとかで怒られたので。これまた友人のPCで実験したら必要なかったんだけど。
  15. 手順5に戻る。今度は「Visual Studio 12 2013」を選択。同様にconfigure、Generate。
  16. OpenCV.slnをVisual Studioで開き、ソリューション、プラットフォーム構成がRelease|WIn32になっているか確認、同様にビルド。
  17. ソリューション、プラットフォーム構成がDebug|WIn32になっているか確認、同様にビルド
  18. 環境変数への追加を普通はやるがここでは別の方法を取る
    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
    にコピー。
    まちがって逆にしないこと。
  19. C:\lib\opencv-2.4.9\build\install
    以外は単純にライブラリを使うだけであれば消してもいいが、別に空き容量に困ってるわけではないので放置する。
  20. 適当に「opencvsample1」とかいう名前でコンソールアプリケーションを作り―の
    http://www.buildinsider.net/small/opencv/03
    の「2.2 新規プロジェクト作成(64bitアプリケーションの場合)」をやる。ソースファイルはまだいらない。
  21. ソリューションエクスプローラーでプロジェクトを選択してる状態でプロジェクト→プロパティとクリックする
  22. 構成:すべての構成
    プラットフォーム:すべてのプラットフォーム
    の状態で
    構成プロパティ→C/C++→全般→追加のインクルードディレクトリに
    C:\lib\opencv-2.4.9\build\install\include
    を追加、適用を押す
  23. 構成:Debug
    プラットフォーム:すべてのプラットフォーム
    の状態で
    構成プロパティ→リンカー→入力→追加の依存ファイル→入力欄クリック→右側の下矢印をクリック→編集で
    opencv_core249d.lib
    opencv_highgui249d.lib
    opencv_imgproc249d.lib
    opencv_objdetect249d.lib
    を追加する
  24. 構成:Release
    プラットフォーム:すべてのプラットフォーム
    の状態で
    構成プロパティ→リンカー→入力→追加の依存ファイル→入力欄クリック→右側の下矢印をクリック→編集で
    opencv_core249.lib
    opencv_highgui249.lib
    opencv_imgproc249.lib
    opencv_objdetect249.lib
    を追加する
  25. 構成:すべての構成
    プラットフォーム:x64
    の状態で
    構成プロパティ→リンカー→全般→追加のライブラリーディレクトリで
    C:\lib\opencv-2.4.9\build\install\x64\vc12\lib
    を追加
  26. 構成:すべての構成
    プラットフォーム:Win32
    の状態で
    構成プロパティ→リンカー→全般→追加のライブラリーディレクトリで
    C:\lib\opencv-2.4.9\build\install\x86\vc12\lib
    を追加
  27. プロパティページを閉じる
  28. ファイル→テンプレートのエクスポートで

    プロジェクトテンプレート→

    テンプレート名「OpenCV_core_win32_x64_Console」

    テンプレートの説明「http://www.buildinsider.net/small/opencv/03」

    アイコンのイメージ:適当に↓とか

    http://www.laganiere.name/img/opencv.bmp

    で完了を押す。

  29. 多分導入完了

確認

さっきのプロジェクトにソースファイルを追加して
#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++→すべてのオプション→浮動小数点モデル
のことだと思う(あってるかな?)。

スポンサーサイト

コメントの投稿

非公開コメント

OpenCV->3.0

今年、私ほとんどOCVばっかりと遊びっている…
OpenCV3.0 is already in beta and probably will get to final release in the next season, so I'd suggest you try writing your program base on 3.0. Some modules have been moved to the "contrib" repo that you may need to aware.
OCV3 is also faster than 2.x due to many code optimizations and default inclusion of Intel IPP.

For the building part, take note of the following:
1> check if the libraries are built with /EHa
-- VC2013 defaults to /EHsc for C++ project. If you own project is compiled with /EHsc while the OCV was compiled with /EHa, some exceptions will not be caught despite writing a proper try...catch block.
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

No title

OCVはかなり大きいなので、小さくにしたいなら”FreeImage Library”も行けます:
http://freeimage.sourceforge.net/

Re: OpenCV->3.0

/EHsc /EHaについて
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/seh.html
見てやっとピンときた・・・。VC2013では、OpenCVライブラリのコンパイル時と、OpenCVを使ったプログラムのビルド時は、/EHaを指定してビルドするべきである、ということでしょうか?

OpenCV3.0について
楽しみです。私は正式リリースまで待ちますが(Visual Studio 2013 Comunityも出ましたし、それも併せて入れよう・・・)。

No title

>OpenCVを使ったプログラムのビルド時は、/EHaを指定してビルドするべきである、ということでしょうか?

Yes~

大事のはOpenCVのビルド設定に合わせ
(→CMAKEのCMAKE_CXX_FLAGS)

No title

Build Insiderで記事を書いていたものです。フィードバック頂きましたのでいくつかこちらで回答させて頂きます。

> (なんで対応画像形式にppmの表記を省くの・・・)
記載漏れです。次回更新時に修正したいと思います。

> cmake-gui.exeを管理者権限で実行
おそらくそのようにしないといけないケースは出力先を管理者権限が必要なディレクトリ(Program Files等)にしている場合のみだと思いますので、通常は管理者権限で実行する必要はありません。

> C:\lib\opencv-2.4.9\build\install 以外は消してもいいらしい
単純にライブラリを使うだけであれば削除しても問題ありません。

> 結果的には4回ビルドしてる
CMakeによるソリューション生成とビルド用のバッチファイルを公開しているのでご参考ください。
https://gist.github.com/atinfinity/51ce4794d0254ab63328

Re: No title

MaverickTse氏へ
ようやっと記事を更新しました。


dandelion氏へ
> Build Insiderで記事を書いていたものです。フィードバック頂きましたのでいくつかこちらで回答させて頂きます。
わざわざ査読いただきありがとうございます。記事を更新しました。ppmの件はちょうどそれについていろいろ情報収集していたのでぼやき半分で書いただけでしたが、まさかそこに反応が来るとは予想外でした。
またOpenCV3.x系が正式リリースされた時にでもそちらの記事を見に行こうと思います。

Float pt. model

float point modelを換えるには:
Configuration Properties > C/C++ > Code Generation > Floating Point Model (下から三つ目)
検索フォーム
デジタル・コルクマ3
コルクマワールド
東京 での時間:
更新履歴


総記事数:
Calendar 1.1
<
>
- - - - - - -
- - - - - 12
3 4 5 6 7 89
10 11 12 13 14 1516
17 18 19 20 21 2223
24 25 26 27 28 2930
31 - - - - - -

全記事

Designed by 石津 花

最新記事
カテゴリ
最新コメント
最新トラックバック
月別アーカイブ
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

yumetodo

Author:yumetodo
FC2ブログへようこそ!

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。