はじめに
RubyKaigiは終わっちゃいましたが、Ruby/OpenCVの開発はまだまだ終わりませんよー。
進捗
SURFが使えるようになりました!
みんなの大好きなcvExtractSURFが、ついにRuby/OpenCVでも使えるようになりました。
これで好きなだけ局所特徴量取りまくればいいんじゃないかと思います。
CvMat#find_contoursのナイスなサンプルが追加されました!(thenosemanさんのおかげ)
thenosemanさんがCvMat#find_contoursについて、詳しい解説付きのサンプルコードを書いてくれました。example/contours/*.rbに入っています。ドキュメントが壊滅的なRuby/OpenCVですが、これを機に少しずつドキュメントを増やしていきたいところです。
OpenCV 2.3.0に対応しました!
油断してたらOpenCV 2.3.0がリリースされてしまいましたが、幸い大幅に変更することなく、対応することができました。
現在のmasterブランチはOpenCV 2.3.0に対応したバージョンになっています。
エラーハンドリングの処理を(だいたい)追加しました
これまではOpenCV側で例外が発生した場合にRuby側へ例外が通知されず、問答無用でプログラムが終了してしまいました。そこで、OpenCV側での例外が発生した場合、それをキャッチしてRubyの例外として投げ直すことで、Ruby側で例外処理を行えるように修正しました。
主要な機能についてはほぼ完了しているため、普通に使う分にはあまり困らないかと思います。
テスト
だいたい全体の80〜90%ぐらいは完了した感じです。
ユニットテストとエラーハンドリング処理の追加の進捗は下記の通りです。CvContourTreeとか地味にめんどくさそうなのが残ってますが、さっさと終わらせてしまいたいところです。
| クラス/モジュール | テストの進捗 | 例外処理の進捗 |
|---|---|---|
| CvMat | だいたい完了 | だいたい完了 |
| OpenCV | cvCvtColor系の機能が(ry | だいたい完了 |
| CvSeq | だいたい完了 | だいたい完了 |
| CvRect | だいたい完了 | だいたい完了 |
| CvContour | だいたい完了 | だいたい完了 |
| CvMoments | だいたい完了 | だいたい完了 |
| CvPoint3d32f | だいたい完了 | だいたい完了 |
| CvScalar | だいたい完了 | だいたい完了 |
| CvPoint | だいたい完了 | だいたい完了 |
| CvSize2d32f | だいたい完了 | だいたい完了 |
| CvPoint2d32f | だいたい完了 | だいたい完了 |
| CvSize | だいたい完了 | だいたい完了 |
| CvChain | だいたい完了 | だいたい完了 |
| CvCircle32f | だいたい完了 | だいたい完了 |
| CvBox2d | だいたい完了 | だいたい完了 |
| CvConnectedComp | だいたい完了 | だいたい完了 |
| CvLine | だいたい完了 | だいたい完了 |
| CvTwoPoints | だいたい完了 | だいたい完了 |
| CvTermCriteria | だいたい完了 | だいたい完了 |
| IplImage | だいたい完了 | だいたい完了 |
| CvHumoments | だいたい完了 | だいたい完了 |
| CvFont | だいたい完了 | だいたい完了 |
| IplConvKernel | だいたい完了 | だいたい完了 |
| GUI | だいたい完了 | だいたい完了 |
| MouseEvent | だいたい完了 | だいたい完了 |
| TrackBar | だいたい完了 | だいたい完了 |
| Window | だいたい完了 | だいたい完了 |
| Curve | だいたい完了 | だいたい完了 |
| CvAvgComp | だいたい完了 | だいたい完了 |
| CvCapture | だいたい完了 | だいたい完了 |
| CvError | だいたい完了 | だいたい完了 |
| CvChainCode | だいたい完了 | だいたい完了 |
| CvSet | だいたい完了 | だいたい完了 |
| CvSlice | だいたい完了 | だいたい完了 |
| CvVideoWriter | だいたい完了 | だいたい完了 |
| CvHaarClassifierCascade | だいたい完了 | だいたい完了 |
| CvCondensation | まだやってない | まだやってない |
| CvContourTree | まだやってない | まだやってない |
| CvConvexityDefect | まだやってない | まだやってない |
| CvHistogram | まだやってない | まだやってない |
| CvMatND | まだやってない | まだやってない |
| CvMemStorage | まだやってない | まだやってない |
| CvSparseMat | まだやってない | まだやってない |
| Point3dSet | まだやってない | まだやってない |
| PointSet | まだやってない | まだやってない |
デモ
CvMat#extract_surfを使ってSURFのキーポイントを取得します。OpenCV.jpの「SURFによる特徴点抽出」のRuby/OpenCV版です。
環境はRuby 1.9.2+OpenCV 2.3.0+Ubuntu 11.04です。
require 'opencv' include OpenCV # 画像をロード filename = ARGV.size > 0 ? ARGV[0] : 'Lenna.png' mat = CvMat.load(filename, CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH) # CvMat#extract_surfを使用するためにグレースケール画像に変換 gray = mat.BGR2GRAY # 画像からSURFのキーポイントとディスクリプタを抽出 keypoints, descriptors = gray.extract_surf(CvSURFParams.new(500, true, 2, 3)) # キーポイントを描画 keypoints.each { |kpt| mat.circle!(kpt.pt, (kpt.size * 0.25), :color => CvColor::Blue, :thickness => 1, :line_type => :aa) } # 結果を表示 GUI::Window.new('SURF').show mat GUI::wait_key
まとめ
以上、第4回Ruby/OpenCV進捗報告でした。
リポジトリはこちら
ser1zw/ruby-opencv - GitHub
https://github.com/ser1zw/ruby-opencv
