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

ファイル構成自体が変わっているので、例えば他の人の作ったプロジェクトファイルを自分の環境で動かして動かない場合、参照している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が抽象クラスで、画像処理系共通の定義がなされている。それ以外は実クラスで画像のスペックによって分けられていて、
こんな感じでメモリ節約のために最低限必要なものを使用する感じ。
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のすべての機能が盛り込まれている訳ではないことにも注意。
[...] 昨日書いたエントリーは、oFに含まれている公式addon、ofxOpenCvについてでしたが、この公式addonに対してある意味異議を唱え、代替するaddonを作ろうとしてる人がいます。 [...]