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++
    • 線形代数
      • 行列の計算
      • 行列を使ったベクトル計算

ご清聴ありがとう

ございました

Made with Slides.com