circumstance evidence

状況証拠 – ヤザキユウイチ

OpenCVことはじめ

Posted on | 2011-07-30 | 2 Comments

外在化して一度調べたことはなるべくまた調べないためのメモ。

OpenCVって何

CやC++で書かれた画像の認識や処理のためのライブラリ群。これじゃ書きたりないだろうけど管々しく引用するのは今回省略。

ヴァージョンについて

2011.7.30時点での最新ヴァージョンは2.3。1.xから2.xへメジャーアップデートした際に大きく構成や機能の変更・追加があることと、日本語リファレンスの書籍の多く(「OpenCV プログラミングブック」とか「詳解 OpenCV」とか)が発売時期から1.xベースなのが悩ましいところ。

1.xと2.x系の大きな違いは?

2.xの最初のリリース、2.0の(オンラインで参照できる)ReadMeを見ると、

  • (OpenCV 1.xのCでのAPIを残しながら)C++のインターフェイスが増えたよ。
  • 機能がたくさん増えたよ。
  • ディレクトリ構造を最適化したり、ドキュメント用意したりしたよ。

といった感じで詳細は個別に見ていかないとよくわからん。ChangeLogはアーカイブファイル内の ./doc/ChangeLog.htm を参照。

どんな関数で構成されているか

opencv.jp を参考に。

1.1pre

http://opencv.jp/opencv-1.1.0/document/

2.2

http://opencv.jp/opencv-2.2/cpp/

見比べるとCVの各機能がより大きく扱われてるのと、CVAUXが一見見当たらないことがわかります。CVAUXを自分が使うかどうかもまだわからないので必要に応じて要調査。

Flashへの対応状況

Marilenaという移植ライブラリがある。

元のCで書かれたライブラリとAS3をブリッジするライブラリはなく、手動でObject Detectionのみを移植したライブラリがある。時期からしてほぼ間違いなく1.xベース。
公式ページ

実装例

元のライブラリを利用してWindowsでネイティブアプリを作り、AIRと入出力する

というすごい例が。
http://blog.alumican.net/2010/08/10_040647

Processingへの対応状況

ラッパーライブラリがある。

http://ubaa.net/shared/processing/opencv/
上記ページを読んでるとMacは1.1ベースでWindowsは1.0ベースらしい。
実装例

oFへの対応状況

ラッパーライブラリがある。

oF自体にadd onとして含まれてる。現時点での最新版では2.2がサポートされている
https://github.com/openframeworks/openFrameworks/tree/master/addons/ofxOpenCv/libs/opencv
ただしOpenCVの機能全部を網羅している訳ではないみたいで、必要な人が必要な部分をラッパーライブラリ化しているようです。

Cinderへの対応状況

ラッパーライブラリがある。現時点での最新版では2.3がサポートされている

https://github.com/cinder/Cinder-OpenCV
ラッパーライブラリのファイル名を眺めた限りですが、現時点ではoFよりサポートしている範囲が広そう。
https://github.com/cinder/Cinder-OpenCV/tree/master/lib/macosx

最後に

まずは大掴みに把握したかったのでひとまずこんな感じで。
oFとCinderはベースがC++なのでラッパーライブラリなくとも読みこめば使えるはず(歯がたたないけど)。またウェブカムやKinectでキャプチャした画像を解析するのをoFやCinderで行ってOSC経由でFlashでそのデータを利用することも、同じ動画を参照できて転送データ量が速度的に問題なければできそう(実際やってる人もいるし)。これ以外でも何かわかったら追記します。

Comments

2 Responses to “OpenCVことはじめ”

  1. Beginer
    November 3rd, 2011 @ 5:12 pm

    OpenCV1.1preと2.3両方を落としてきました。

    そこで質問なんですが、
    OpenCV1.1preのときにはあった、.lib等の各ファイル(dll,hpp…)が2.3のデータフォルダには同梱されていないということはあり得るのでしょうか?

    あるいはリネームや置換場所(パス)などの関係で当方が確認できていないだけなのでしょうか?
    -この場合次の、cxcore.lib,ml.lib,cvaux.libなどはどのように、リネーム、置換されているのでしょうか?

    長文ですいませんが最後に聞いておきたいことが1.1preに対して。2.2はパッチというか導入追加版と
    いう認識で、独自でデータフォルダの階層を作成し、そこに適時必要な.lib等を自分で置換する、
    といったやり方のほうが理想なのでしょうか?
    (難しいですかね…)

    長い上、面倒かと思いますが、ご返答いただけるやつだけでもお答えいただけると助かります。
    どうかお願いします。

  2. yuichi
    January 3rd, 2012 @ 11:09 pm

    お返事かなり遅くなってしまってすいません。
    Windows環境における1.1preと2.3のファイル構成における差分は何か、ということですよね。
    ぼくもそこまで詳しいことはわからないのですが、最近出たOpenCV2プログラミングブックに1.x系と2.x系の差分が載ってましてそれは以下の通りでした。
    ・cv名前空間の導入(2.0系におけるC++インターフェイスはすべて名前空間cvに属している)
    ・関数名の変更(関数名の頭にcvがついていたものは上記名前空間の導入に伴って、cvを取る形でリネームされている)
    ・IplImage型とcvMat型はcv::Matへ統合されている
    ・リソース管理の自動化(コンストラクタ/デコンストラクタの利用が可能に)
    ・テンプレートの導入
    ・演算子のオーバーロード
    同書籍によると1.x系と2.x系の命令を混ぜて記述することもありうるニュアンスでしたよ。つまりパッチというよりリプレースという感じじゃないでしょうか。メジャーアップデートですし。

Leave a Reply





about

ウェブ・デザイナー/インターフェイスデザイナー。詳細は下記をご覧ください。

follow us

search

related link

Admin