アーカイブ
OpenCVをはじめた
openFrameworksをやっていて詰まったのでとりあえずOpenCVをやってみることにした。
openFrameworksはOpenCV・OpenGL・シリアルポート関連・音声関連のC++ライブラリをまとめたWin/Mac/Ubuntuで動作するクロスプラットフォームラッパーで、processingの影響を受けているらしいのだが、その中のOpenCVとOpenGL自体がまず巨大なライブラリなのでこいつらを扱う作法を知っていないとopenFrameworksが使いこなせない。
今回はOpenCVを単体で扱ってみてどんなもんか探ってみた。
■OpenCVのセットアップ、サンプル実行、コンパイル環境と対応カメラの確認
マシンに3つOSが入っているので実行環境も3つ揃えてみた。
MacとUbuntuはgccで、WinはVS2008でコンパイル。Ubuntuは色々ためしたけどiSightを認識しなかったが古い外付けUSBカメラを認識して使えた。
この内Macだけが駄目。描画が異常に重い。ググったらhighguiとCarbonの組み合わせが悪さしている?ような情報もあったがよくわからなかった。でもちゃんと動いていると報告してる人がたくさんいる。悔しい。
- MacにMacportsでインストール、サンプルをgccでコンパイルしi-Sightで実行
- VMWare+Ubuntuにaptでインストール、サンプルをgccでコンパイルしLogicoolの古いカメラQV-40で実行
- Windowsにインストーラからいれて、VisualStudio2008でコンパイルする設定、iSightでキャプチャ
- VMWare+Ubuntuで単純なカメラキャプチャプログラムとMakefileを1から書く
- おまけ:Macにソースからインストールしなおし(意味無かった、相変わらず重い)
本当はMacかUbuntuで動かしたかったけど、WindowsでVS2008でやる事にした。
俺が電車で移動中プログラムを書く事が多いので、Windowsからは内蔵i-Sightを使えて一番都合が良い。
cvWaitKey(msec)の待ち時間を短くしすぎなければ(30ぐらいなら大丈夫)どの環境でも動く事が確認できたので、後述するプログラムはどの環境でも動くと思う。少なくともWindowsとUbuntuでは動いている。
■画像処理の勉強
この本でやった。プログラムの途中重要な定数宣言部分が省略されまくったりしていて困ったけど、理論的な所は詳しく解説してくれているのでこの本と翻訳版ドキュメントとサンプル集を見ればなんとかなった。
毎日コミュニケーションズ
売り上げランキング: 58513

とっかかりとしてはよい本
OpenCVを日本語でまとまって解説した初めての本
肩すかしOpenCVというとまっさきに「顔認識」を思い浮かべるけど、機械学習を用いた分類器については巻末のリファレンスに少し書かれている程度で、この本では基本的なOpenCVの組み込み関数を使った2値化やノイズ除去や表色系の変換、輪郭、エッジ抽出、テンプレートマッチング、物体追跡、背景差分法などが書かれている。書かれている内容はbuilt with processingやディジタル画像処理の基礎と応用なんかに書かれている内容と被っている部分が多いけど、OpenCVの関数を使っているから滅茶苦茶処理が速い。やばい。もっと早くOpenCVに移れば良かった。
続きを読む…
AS3 – あらためてラベリング処理
火曜に、imglのうっちーとあらためてラベリング処理ってどうやんのよという話をしていて、あらためてAS3で書き直した。
ただし、ラベルの衝突処理はまだやっていない。
ラベリング処理について→s.h.log: Proce55ing – 2値化画像を4近傍ラベリング処理してパーツ抜き出し
今まで、ラベルそのものを2次元のint配列で管理してたけど、今回はBitmapDataオブジェクトとして保存する様にしてみた。BitmapDataならx,y座標で要素にアクセスできるし、ピクセルはuint型なので都合がいい。
■できたもの
download => fla, as, swf (FlashDevelop3.0.0 Beta5 + FlashCS3)
年末年始作ったカメラから画像処理のサンプルを元に改造した。
webcamから撮影してBitmapDataにして、1ピクセルずつ走査して真っ白(0×00FFFFFF)のピクセルを検出。
さらにラベリング処理をして、「ピクセルのかたまり」毎に番号をつける。
今回はノイズを飛ばしたりしていないので、右の本棚の小さな白にも反応してしまって28個とか検出される

AS3 – BitmapMirror.asでYouTubeを鏡写しにする
右下の「Load」を押して再生。
→ Source Code (Flash CS3 / AS3)
土善開発合宿(ゆーすけべー日記: 奥出研’07秋合宿@土善旅館に部外者(OB)の開発合宿も兼ねて参入してきた)で作ってたBitmapMirror.asを公開しておきます。
宴会直前に到着したのであんまり時間がなかったけど、今回やったことは3つ
1.YouTubeのビデオ(flv)をGoogleVideo経由で取得して
2.AS3のBitmapDataとして扱って
3.鏡面反射させる
ビデオはこれを読み込んでいます。ひゃあ゛ああああうまい゛いいいいい
■1.YouTubeのビデオをGoogleVideo経由で取得する
数ヶ月前にGoogleに買収されて以来、
http://www.youtube.com/watch?v=YRY0M5cgDG8
のビデオは
http://cache.googlevideo.com/get_video?video_id=YRY0M5cgDG8
から取れる様になりました。
以前はWebService::YouTubeを使って
スクレイピングしなければならなかったけど、素直になった。
Flash CS3 – 背景差分法
昨日Flash CS3を買ったので、さっそくAS3でやってみた。
自分で1からBitmapDataクラスを使うのは初めてだったけどprocessingやってたお陰ですぐわかった。
一旦カメラの前からどいて、Save Backgroundボタンを押してみてください







最近のコメント