読者です 読者をやめる 読者になる 読者になる

第2回 Ruby/OpenCV進捗報告

はじめに

第1回からだいぶ間が開きましたが、ここらで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


結果はこんな感じ。それっぽく直線が検出できています。
f:id:ser1zw:20110321014249p:image

まとめ

そんなわけで、Ruby/OpenCVの現状をまとめてみました。

リポジトリはこちら

ser1zw/ruby-opencv - GitHub
https://github.com/ser1zw/ruby-opencv