circumstance evidence

Information

この記事は 2011年08月10日に書かれた how2 カテゴリーの記事です。

oFでのOpenCV

今回はoF(openFrameworks)におけるOpenCVについて。自分向けのメモも兼ねてさっとまとめてるのであまり面白みのない文章ですが。

ヴァージョン話

OpenCVに大きく1.x系と2.x系の二つあるように、それを利用するoF側のラッパーファイルも当然構成が異なる。
うまいことoF自体のヴァージョンアップとからめていて、0062と0070(こないだリリースされたばかりの最新版)で同梱されているOpenCVのヴァージョンが異なりそれに伴ってファイル構成が異なる。フォルダ/ファイル構成を見比べるとこんな感じ。

oFOpenCV

ファイル構成自体が変わっているので、例えば他の人の作ったプロジェクトファイルを自分の環境で動かして動かない場合、参照しているOpenCVのヴァージョンが異なるから、という可能性もある。

以下は0070とそれに同梱されているOpenCV 2.xの話。

ファイル構成

addonsの中にofxOpenCvというフォルダがあってここにoFで使うOpenCV関係のファイルが入っている。
直下に libs と src というフォルダがあるが、libsの方がOpenCVの実ファイルでsrcの方がoFで用意しているラッパーファイル群。

https://github.com/openframeworks/openFrameworks/tree/master/addons/ofxOpenCv/src

ofxOpenCv.h(メインの読み込みファイル)、ofxCvMain.h(廃止予定の旧読み込みファイル)、ofxCvConstants.h(定数の定義)を除くと、大きく画像処理系と輪郭検出系の二つに分かれる。

画像処理系

ofxCvImage.hが抽象クラスで、画像処理系共通の定義がなされている。それ以外は実クラスで画像のスペックによって分けられていて、

  • ofxCvColorImage.h…3チャンネル持ってる8ビット(IPL_DEPTH_8U)画像。ピクセル値は各チャンネルごとに 0-255。
  • ofxCvFloatImage.h…1チャンネル持ってる32ビット(IPL_DEPTH_32F)画像。ピクセル値は基本的には0-1.0だが他の値を持たせることも可能。
  • ofxCvShortImage.h…1チャンネル持ってる16ビット(IPL_DEPTH_16U)画像。ピクセル値は0-65535。
  • ofxCvGrayscaleImage.h…1チャンネル持ってる8ビット(IPL_DEPTH_8U)画像。ピクセル値は0-255。

こんな感じでメモリ節約のために最低限必要なものを使用する感じ。

輪郭検出系

ofxCvContourFinder.hとofxCvHaarFinder.hの二つ。

ofxCvContourFinder.hは「画像の中から白い塊(blob)を見つけ、重心、バウンディングボックス、面積、長さ、多角形の輪郭を認識し、結果はofxCvBlobオブジェクトのベクトルに配置される。」(‘Finds white blobs in binary images and identifies centroid, bounding box, area, length and polygonal contour
The result is placed in a vector of ofxCvBlob objects.’)とのこと(ソースコードのコメント文より)

輪郭検出する際は極力解析しやすいようにカメラなどから入力された画像に対して動きのある部分を白、ない部分を黒に二値化する前処理を行うが、ここでいう白い塊というのはその動きのある部分のことを指す。

ofxCvHaarFinder.hはHaar-like特徴を使った顔検出のためのクラス。
Kyle McDonaldが中心になって整備中。
http://forum.openframeworks.cc/index.php?&topic=2006.0
http://code.google.com/p/kyle/

それ以外

今まで出てこなかったofxCvBlob.hは、画像処理系と輪郭検出系の両方から参照される単機能なクラスで、受け取ったpointからblobを生成する。blobというのはoF専用の用語ではなくOpenCV用語。oF作ってる人たちの定義では “多角形の輪郭で表される均質なパッチ” とのこと。

雑感

ofxOpenCv自体は輪郭検出系の機能を使うために用意され、画像処理系はそのための下準備のためのものという印象。本家OpenCVの仕様と見比べると採用されている機能が限定的であることがわかる。
また例えばofxCvContourFinder.hの中で、本家OpenCVのContourFinderのすべての機能が盛り込まれている訳ではないことにも注意。

One Comment

  1. [...] 昨日書いたエントリーは、oFに含まれている公式addon、ofxOpenCvについてでしたが、この公式addonに対してある意味異議を唱え、代替するaddonを作ろうとしてる人がいます。 [...]

Leave a Reply