読者です 読者をやめる 読者になる 読者になる

OpenCV

■OpenCVとは
 

CV(computer vision)

 
画像処理とCVは違う物である。画像処理とは読んで字のごとく画像を処理するもの。具体的に画像の色や明るさを調整したり、拡大縮小と言った幾何的な形状の変形をする事など多岐に渡る。
CVとは例えばアイスクリームの写真を見た時に人間は視覚から入力された画像の情報からアイスクリームの形状情報に合うものをたんさくしてる。これをコンピュータにやらせるのがCV。
互いには別の学問だがそれぞれ密接に関係している。
ビジョンベースマーカー型ARは「マーカーの見かけの形状からカメラとマーカーの相対的な位置、姿勢関係を推定する」という処理をもとにモデルをレンダリングしているコンピュータビジョンの一種と言える
 
openCVが生まれる前は画像処理はそれはもう大変だった。画像処理において画像ファイルの読み込みや繰り返し処理、およびポインタの多様など、この分野のプラグラムならではといえる煩雑な処理を何度も記述する事がもとめられ「誰もがかけないと行けないにもかかわらず誰もライブラリ整備をしていない」という状況であって必然的にこの画像処理、そしてCVの分野は敷居が高いものとなっていた。
 
OpenCVはC/C++/Pythonむけに開発されたライブラリ。将来的にはJava対応の予定があるとのこと。
OpenCVはWindows,Mac,Linux,Androidのプラットフォームをカバーしている。このライブラリは2500以上のアルゴリズムを含んでいる。世界中で250万ダウンロードを記録し、40000の使用者達のグループが存在し、それぞれいろいろな分野で使われている。
 
 
■Macで利用するまで
     1.Xcodeをインストールする 
          App Storeなどからインストールをする。
 
     2.MacPortsのインストール
          MacPorts-XXX.dmg(XXXにはバージョンを識別するための文字が入る)をダウンロードし、マウントする。
          MacPortsは/opt/local/binにインストールされるため、.bashrcに
               export PATH=$PATH:/opt/local/bin
          という1行を追加する。
          exportと言うのは環境変数を定義するためのもの
          書き加えたら
               $ source .bashrc
          をしていま加えた設定を有効にする。
 
     3.OpenCVのインストール
          OpenCVをインストールする前にMacPortsでインストールされるOpenCVの情報を確認する。
               $ port info opencv
          これによりバージョン情報やライブラリの依存関係が分かるのでこれをもとに必要に応じてライブラリパッケージをインストールする。
              > Library Dependencies: zlib, bzip2, libpng, jpeg, tiff, ilmbase, openexr, ffmpeg
          という情報から以下の操作でzlibをインストールしている。
               $ sudo port install pkgconfig zlib
          
          続いてOpenCVのインストールを行う。
               $ sudo port install opencv
 
     4.サンプルプログラムで動作確認
          /opt/local/share/OpenCV/samples
          があるはずなのだが見つからなかったのでここ(http://opencv.willowgarage.com/wiki/) からダウンロードしてその後解凍→できたディレクトリを
          /opt/local/share/
          に置き換えた!
          すると当然samplesフォルダもあるので適当なファイルを実行してみる。今回はfind_objを実行させてみる。
               sh build_all.sh
              ./find_obj
          このファイルはある画像が与えられてそれを別の画像の中から見つけ出すということをやっている。
          とりあえず動いたということでソース読むのは後で。(知らないことがおおすぎて読めないのでもう少し勉強してからにしようと思う)      
 
     5.XcodeでOpenCVを使う
          今回はMac OS X->Application->Command Line Tool を選び名前を入力してC++タイプを選ぶ。
          OpenCVをXcodeで使うために設定をする。
          ウインドウ右上の検索窓を使ってHeader Search Pathsを /opt/local/includeと設定する。
          

f:id:panchiga:20130220030854p:image

次にライブラリへのリンクを指定する。
先ほどはBuildSettingsだったがその右のBuild PhasesのLink Binary With Librariesにある「+」をクリックして「Add other…」から
libopencv_imgproc.2.4.3.dylib
libopencv_highgui.2.4.3.dylib
libopencv_core.2.4.3.dylib
を加える。

f:id:panchiga:20130220030858p:image

これで準備が完了したので実際に簡単なコードを動かしてみる。
 
コード(下記リンクのサンプルコード)
 

#include <iostream>

#include <opencv2/opencv.hpp>

 

usingnamespacecv;

usingnamespacestd;

 

int main () {

    VideoCapture capture(0);

    Mat frame;

    

    while (waitKey(1) != 'q') {

        capture >> frame;

        imshow("sample", frame);

    }

    

    return 0;

}
カメラ画像を取得し、ウインドウに表示する簡単なプログラム。
 
ここで動けばいいのだが自分はエラーが起こった。
以下エラー文

2 errors

Undefined symbols for architecture x86_64:

  "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from:

      _main in main.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

探してみたら同じエラー出てる人がいた(http://stackoverflow.com/questions/12770115/linking-libraries-opencv-2-4-2-on-xcode-4-5-1 )この人はApple LLVM compiler 4.2 - Language -> C++ Standard Libraryをlibc++(LLVM C++ standard library with C++ 11 support) から libstdc++(GNU C++ standard library) に変えたらコンパイル通ったそうなので自分もやってみたら通った。
 
実行すると画面に自分の顔が出てきておしまい。
 
 
感想
やってみると意外と時間かかりました。samplesが見つからなかったり、コンパイル通らなかったりopenCVのインストールが意外に長かったり。
これから面白いことができるようになるのかなって思って勉強しようと思います。ARに使って何かするところまでやりたいですね。