キリンを召還するブログ。

Unity,OpenCVとRaspberryの事とか書くと思います。普段はiOSとかAndroidの枯れたアプリ技術を中心にやってます。なので、たまに失敗メモとして日常のハマった事とかも書きます。センサーも好きです。

【OpenCV】OpenCV2.4.7をMacにインストールしてサンプルを動かしてみる

OpenCVを始めるにあたってインストールと動作確認までが無知だと結構厳しい感じだったので噛み砕いた内容を一応書いておこうと思います。備忘録てきに。

最初はOpenCVを適当にインストールしときゃ良いんでしょくらいに考えていてWindowsでチャレンジしたら環境変数とかが結構面倒で、しかも僕の環境はWindows8.1+VisualStudio2013なので何かうまく行かずにとりあえず断念。今回入れたのはOpenCV 2.4.7でMac(OS X 10.9)とXcode5.0.2を使ってます。

1.準備

まず準備ですがMacにXcodeが入っている事が前提になります。AppleさんがもはやXcode5以下は許さないという強硬なスタンスなのですが、Xcode5.0.2はLionだと入れられなかったのでMavericksにアップデートさせられました。OpenCVやりたいだけなのに何故かPCが最新化されていく。ご存知かと思いますがMavericksは無償でアップデートできます。ちなみにOSアップデートに通信環境良くても数時間かかって、Xcodeのインストールと合わせると半日コースになるのでご注意を。

2.MacPortsのインストール

OS側の環境が整ったらMacPortsをインストールします。MacPortsOS X用のパッケージ管理システムで使わなくてもOpenCVの環境は作れますが使った方が俄然簡単です。MacPortsのダウンロードサイトに行ってインストールを行いましょう。

MacPortsダウンロードサイト

http://www.macports.org/install.php

f:id:jkawasaki:20140105164426p:plain

MacPortsは/opt/local/bin配下にインストールされます。僕はそのままでもインストール出来たのですが参考ドキュメントを見る限りだと「.bashrcに下記を記入してくれ」という記載があったので一応。

export PATH=$PATH:/opt/local/bin

パスを通すって事ですね。通した後に下記コマンドを実行します(bash前提)。

$ source .bashrc

ちなみにここから先はターミナルでの作業になりますのでターミナル慣れてない方はちょっと厳しいと思いますが頑張ってください。

3.OpenCVインストール

さて、いよいよOpenCVを入れていきます。手始めにMacPortsを使ってOpenCVの情報を下記コマンドで確認してみましょう。

$ port info opencv

こんな感じの結果が出ると思います。

f:id:jkawasaki:20140105164803p:plain

まーライセンスとかその他色々です。このコマンド効かなかったらMacPortsが使えてないってことになります。

次にOpenCVをインストールする前に必要なライブラリパッケージをインストールします。下記コマンドを実行しましょう。sudoはパスワードを聞かれるので適宜入力してください。パスワードが分からない場合はちょっとこの先には進めないのでその場合は親御さんに相談してください。

$ sudo port install pkgconfig zlib

するとわらわらと何やらインストールが始まります。

f:id:jkawasaki:20140105164909p:plain

そしていよいよOpenCVのインストールを行います。下記コマンドを実行しましょう。

$ sudo port install opencv

わらわらとインストールが始まります。結構長い(15分くらい?)です。

4.サンプルアプリの作成

無事インストールが出来たという事で実際にOpenCVが使えるようになっているかをXCodeからサンプルプログラムで試してみます。

今回はカメラを使ってみるのでMac OS X用の「Command Line Tool」アプリを作成します。

f:id:jkawasaki:20140105165736p:plain

プロジェクト名は適当に付けて新規プロジェクトを作成してください。Bundleとかはサンプルなので正直なんでも良いです。

やるべき事は5つです。

①Header Search Pathの設定

TARGETのBuileSettingで検索窓に”header”といれて検索するとHeader Search Pathという項目が見つかります。ここから下記パスを追加してください。

/opt/local/include

f:id:jkawasaki:20140105165715p:plain

f:id:jkawasaki:20140105165918p:plain

オプション部分はnon-recursiveで設定してください。recursiveだと謎のエラーが出ますので。これでOpenCVのヘッダーファイルを参照するパスの設定が出来ました。


②Library Searh Pathの設定
次にライブラリの参照設定をします。これを行わないとリンカーの設定が上手くいかないでビルドした時に下記のようなエラーが出ちゃいます。最初見たドキュメントにこの記載がなかったのでちょっとハマりました。設定箇所はヘッダーの時と同様にLibraryで検索すればすぐ見つかります。下記パスを設定しましょう

/opt/local/lib
ターミナルで見ると分かるのですが、このディレクトリ配下にOpenCVのライブラリ群が揃っています。

③ライブラリへのリンク指定
Build Phaseの「Link Binary With Libraries」という項目からリンクライブラリを選択します。追加するのは下記3つのライブラリです。

libopencv_core.2.4.7.dylib
libopencv_highgui.2.4.7.dylib
libopencv_imgproc.2.4.7.dylib

+ボタンを選択すると一覧が出てくるのですが僕の場合は何故か表示されなかったので”Add Other”から直接ファイルを探して追加しました。

f:id:jkawasaki:20140105170010p:plain

④サンプルプログラム(main.cpp)を記述

main.cppにサンプルプログラムとして下記を記述します。

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

int main()
{
    VideoCapture cap(0);
    Mat frame;

    while (waitKey(1)!='q') {
        cap >> frame;
        imshow("sample", frame);
    }
    return 0;
}

⑤その他
ここまででビルドする準備は整ったのですが、最新環境でそのまま実行するとDevelopment Targetが10.9になっているので失敗します。このサンプルは10.7向けになっているので変更してあげてください。

あと諸々のセッティングでエラーが出る場合には一度[product]➡[clean]してみてください

いざ実行。

f:id:jkawasaki:20140105165627p:plain

無事表示されました。

iPhoneでも同じプログラムが実行出来ると思うのですがそれを試すくらいならば先に進んだ方が良さそうなので今回は試さないです。

これでOpenCVが最低限動く環境となったのであとは好きに遊んでいきましょう。