進捗
ロードマップ
だいたいこんな感じで進めようと考えています。気分によって順番が変わる可能性があるかも。
- OpenCV 2.2に対応 (完了)
- Ruby 1.9.xに対応 (完了)
- もともと実装されているメソッドのテスト ←いまここ
- 安定して使用するために必要な機能の追加
- 少なくともエラーハンドリングはしっかりしないと
- OpenCVの機能のうち、まだ実装されていないものを追加
- OpenCV 2.2のfeatures2dまわりは是非とも使えるようにしたいところ
- Windowsでも動くように対応
- ドキュメントの整備
テスト
ユニットテストの進捗は以下の通りです。もともと実装されていたメソッドのうち、約70%のテストが完了しています。
下記の表では「まだやってない」がかなり多いですが、主要な機能のほとんどはCvMatへ実装されているので、全体としてはそこそこ進んでる感じです。
| クラス/モジュール | 進捗 |
|---|---|
| CvMat | 80%完了 |
| OpenCV | cvCvtColor系の機能がけっこう残ってる |
| CvSeq | だいたい完了 |
| CvRect | だいたい完了 |
| CvContour | だいたい完了 |
| CvMoments | だいたい完了 |
| CvPoint3d32f | だいたい完了 |
| CvScalar | だいたい完了 |
| CvPoint | だいたい完了 |
| CvSize2d32f | だいたい完了 |
| CvPoint2d32f | だいたい完了 |
| CvSize | だいたい完了 |
| CvChain | だいたい完了 |
| CvCircle32f | だいたい完了 |
| CvBox2d | だいたい完了 |
| CvConnectedComp | だいたい完了 |
| CvLine | だいたい完了 |
| CvTwoPoints | だいたい完了 |
| CvTermCriteria | だいたい完了 |
| IplImage | だいたい完了 |
| CvHumoments | だいたい完了 |
| CvFont | だいたい完了 |
| IplConvKernel | だいたい完了 |
| Curve | まだやってない |
| CvAvgComp | まだやってない |
| CvCapture | まだやってない |
| CvChainCode | まだやってない |
| CvCondensation | まだやってない |
| CvContourTree | まだやってない |
| CvConvexityDefect | まだやってない |
| CvError | まだやってない |
| CvHaarClassifierCascade | まだやってない |
| CvHistogram | まだやってない |
| CvIndex | まだやってない |
| CvMatND | まだやってない |
| CvMemStorage | まだやってない |
| CvSet | まだやってない |
| CvSlice | まだやってない |
| CvSparseMat | まだやってない |
| CvVideoWriter | まだやってない |
| GUI | まだやってない |
| MouseEvent | まだやってない |
| Point3dSet | まだやってない |
| PointSet | まだやってない |
| TrackBar | まだやってない |
| Window | まだやってない |
デモ
OpenCV 2.2 documentationにあるハフ変換のサンプルをRuby/OpenCVを使って書いてみました。
環境はRuby 1.9.2+OpenCV 2.2+Ubuntu 10.10です。
require 'opencv' include OpenCV # 画像をロード mat0 = CvMat.load(ARGV[0], CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH) # グレースケールにして大津の二値化 mat, th = mat0.BGR2GRAY.threshold(0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU) # Cannyのエッジ検出 mat = mat.canny(50, 200) # 確率的ハフ変換で直線検出 seq = mat.hough_lines(CV_HOUGH_PROBABILISTIC, 1, Math::PI / 180, 50, 50, 10) # 検出した直線を描画 result = mat.GRAY2BGR seq.each { |points| result.line!(*points, :color => CvColor::Red, :thickness => 2, :line_type => :aa) } # ウィンドウを作成して表示 GUI::Window.new("src").show mat0 GUI::Window.new("dst").show result GUI::wait_key
まとめ
そんなわけで、Ruby/OpenCVの現状をまとめてみました。
リポジトリはこちら
ser1zw/ruby-opencv - GitHub
https://github.com/ser1zw/ruby-opencv
