Visual C++で始めるOpenCV
歌舞伎座.tech#8「C++初心者会」
宇都宮 諒(@ryo511)
Visual C++で始めるOpenCV
初心者向け
OpenCV開発環境の話
歌舞伎座.tech#8「C++初心者会」
宇都宮 諒(@ryo511)
自己紹介
- 宇都宮 諒(うつのみや りょう)
- Twitter: @ryo511
- エンジニア@アシアル株式会社
- 得意な言語:PHP
- 何とか書ける言語:JavaScript, C#
- ほとんど書けない言語:C++
- IDEが好き(PhpStorm等のIntelliJ製品)
そもそもなぜこんな発表を?
- OpenCV初心者向けの入門書に不満があった
- せっかくVisual Studioを使っているのに、Visual Studioの便利機能を全然使っていない
- dllをダウンロードして、プロジェクトの参照に追加して…
- ちょっと実験したい時にいちいち↑のような作業はやってられない
- 簡単にセットアップできるOpenCV環境の作り方を広めたい
OpenCVとは
- コンピュータビジョンとは:コンピュータによる画像認識
- OpenCV(Open Source Computer Vision Library)は、コンピュータビジョンのための諸機能を提供するオープンソースライブラリ
- 現在主流はバージョン2系で、C/C++/Python向けにインターフェースが用意されている
- その他の言語でもサードパーティのラッパーが存在する
- 対応OS: Windows, Linux, OS X, Android, iOS
OpenCVでできること
- 画像処理
- 構造解析
- モーション解析と物体追跡
- パターン認識
- カメラキャリブレーションと3次元再構成
- 機械学習
- ユーザインターフェース
- etc...
OpenCVの応用例
Visual StudioでOpenCV
- dllをダウンロードして参照に追加…はめんどくさい
- インストールして環境変数を設定して…も同上
- 簡単・便利なNuGetを使うべき
NuGetとは
- Visual Studioのパッケージマネージャ
- 元はプラグインだが、2013では標準装備
- GUIでライブラリを選ぶだけで、必要なdllをプロジェクトにインストール
- OpenCVもインストール可能
Visual C++でのハマりどころ
- プロジェクトの種類がいっぱいある…
- ATL, CLR, MFC, Win32...
- OpenCVを簡単に使うならWin32
- ふつうのC++で書ける
- .NET Frameworkを使いたいならCLR
- C++の独自拡張
- ATL, MFCはC++でWindowsアプリを書くためのフレームワークらしい(よく知らない)
他の環境は?
- WindowsではVisual Studio + NuGetが一番楽そう
- Mac(OS X)はどうなの?
→調べてみた
OS XでのOpenCV
1. Homebrewでインストール
brew tap homebrew/science
brew install opencv
2. ビルド&実行
g++ cv_sapmle.cpp -o cv_sapmle `pkg-config opencv --cflags --libs`
./cv_sapmle
Visual Studio使うより簡単
OS X上のIDEは?
- XCode: Visual Studioと同じく、参照関係を手動設定
- Eclipse: 同上
- CLion: CMake使える人ならつかえる
OS XでC++でOpenCVを使うなら、
エディタとターミナルが一番手軽
C++不要説
- そもそも、C++は敷居が高い
- OpenCVにはPythonインターフェースもある
- Pythonは初心者にもやさしい! はず!
PythonでOpenCV
1. Homebrewでインストール
※Homebrewでインストールしない場合、Pathを通す必要がある
brew install python
python cv_sample.py
2. 実行
Pythonを使うと嬉しいところ
- 構文がシンプル
- コンパイル不要
- PythonのOpenCVは内部的にnumpyを使っているので、データの相互運用が簡単
- 機械学習ライブラリとの連携も簡単
でも、IDEは無いの…?
- Python向けIDE
- OpenCVの実験用なら無料のCommunity Editionで十分
- OpenCVのAPIの補完も有効
C++は本当に不要?
- そんなことはない
- OpenCVのサンプルコードの多くはC++で書かれている
- C++を書くことはなくても、読める必要はある
- 速さを追求するならC++で書く必要がある
OpenCVには数学も必要
- 大学教養程度の線形代数の知識が必要
- 文系プログラマには、C++よりも数学の方が難しい…
まとめ
- WindowsでOpenCV
- Visual StudioでNuGetを使うのが便利
- OS X等のUnix環境
- コンパイラとエディタさえあればOK
- Pythonならもっと手軽
- OpenCVを使う上で、身につけておくとよいスキル
- C++
- 線形代数
- 行列の計算
- 行列を使ったベクトル計算
ご清聴ありがとう
ございました
Visual C++ and OpenCV
By Ryo Utsunomiya