第2回 Ruby/OpenCV進捗報告
進捗
ロードマップ
だいたいこんな感じで進めようと考えています。気分によって順番が変わる可能性があるかも。
- 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