2011-05-07
第3回 Ruby/OpenCV進捗報告
はじめに
連休もそろそろ終わりですが、皆様いかがお過ごしでしょうか?
進捗
gemが作れるようになりました!(主にpctingさんのおかげ)
pctingさんがナイスな修正をしてくれたおかげで、Ruby/OpenCVのgemがRakeで簡単に作れるようになりました。
$ git clone git://github.com/ser1zw/ruby-opencv.git
$ bundle install
という感じでOKです*1。
$ rake install_gem
とやっても大丈夫なはずなのですが、RVMを使っているとうまくいかないことがある(パスの問題かも)ので、要調査…。
ffcall無しでもGUIが使えるようになりました!(ただしTrackbar以外)
これまではffcallがインストールされていない場合、WindowなどGUIに関する機能が使えませんでした。しかし、実際にffcallに依存しているのはWindow#set_trackbarのみ*2ですので、その他の機能についてはffcall無しでも使用できるように変更しています。
現状ではffcallまわりがちょっと不安定な上、他のプラットフォームで動かすときに困りそうなので、できれば使わないようにしたいと思っています。要はクロージャっぽいものが使えればいいので、Boost使ってなんとかならないかなーとか、でもこれだけのためにBoost持ち出すのもなーとか、そもそもC++書けないしなーとか考えつつ、代替案を検討中です。
テスト
ユニットテストの進捗は以下の通りです。GUIまわりの修正とテストがだいたい完了しており、CvMatも地味に進んでいます。
まだ手をつけてないものも結構あるのですが、さっさと終わらせて新機能の追加に移りたいところです。
| クラス/モジュール | 進捗 |
|---|---|
| CvMat | 90%完了 |
| OpenCV | cvCvtColor系の機能がけっこう残ってる |
| 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 | まだやってない |
| CvChainCode | まだやってない |
| CvCondensation | まだやってない |
| CvContourTree | まだやってない |
| CvConvexityDefect | まだやってない |
| CvError | まだやってない |
| CvHaarClassifierCascade | まだやってない |
| CvHistogram | まだやってない |
| CvMatND | まだやってない |
| CvMemStorage | まだやってない |
| CvSet | まだやってない |
| CvSlice | まだやってない |
| CvSparseMat | まだやってない |
| CvVideoWriter | まだやってない |
| Point3dSet | まだやってない |
| PointSet | まだやってない |
デモ
前回までとはちょっと趣向を変えて、OpenCVのGUIを使ったペイントのデモです*3。
マウスのドラッグで線の描画、右クリックで塗りつぶし、ESCキーで終了です。また、キーを入力して線の太さの変更、色名を入力して線の色の変更ができます。
環境はRuby 1.9.2+OpenCV 2.2+Ubuntu 11.04です。
require 'opencv' include OpenCV # Windowに描画領域を作成 window = GUI::Window.new('free canvas') canvas = CvMat.new(500, 500, CV_8U, 3).fill!(CvColor::White) window.show canvas colors = CvColor::constants.collect{ |i| i.to_s } usage =<<USAGE [mouse] drag - draw right button - fill by color [keyborad] 1 to 9 - change thickness of line type color name - change color esc - exit USAGE puts usage # 線の色と太さ opt = { :color => CvColor::Black, :tickness => 1 } # マウスイベントの処理 point = nil window.on_mouse{ |m| case m.event when :left_button_down # マウスドラッグで線の描画 canvas.line!(m, m, opt) point = m when :move if m.left_button? canvas.line!(point, m, opt) if point point = m end when :left_button_up point = nil when :right_button_down # マウスの右ボタンで塗りつぶし canvas.flood_fill!(m, opt[:color]) end window.show canvas } # キー入力の処理 color_name = '' while key = GUI.wait_key next if key < 0 or key > 255 case key.chr when "\e" # ESCキーで終了 exit when '1'..'9' # 線の太さを変更 puts "change thickness to #{key.chr.to_i}." opt[:thickness] = key.chr.to_i when /[A-Za-z]/ # 線の色を変更 color_name << key.chr choice = colors.find_all{ |i| i =~ /\A#{color_name}/i } if choice.size == 1 color = choice[0] puts "change color to #{color}." opt[:color] = CvColor::const_get(color) end color_name = '' if choice.size < 2 end end
こんな感じでペイントっぽいことができます。
まとめ
リポジトリはこちら
人柱はいつでも大歓迎ですよー。
- 135 http://b.hatena.ne.jp/
- 117 http://www.google.com/search?client=ubuntu&channel=fs&q=ubuntu+11.04+設定&ie=utf-8&oe=utf-8
- 88 http://www.google.com/custom?hl=ja&client=pub-9300639326172081&cof=FORID:13;AH:left;CX:Ubuntu%2010%2E10;L:http://www.google.com/intl/ja/images/logos/custom_search_logo_sm.gif;LH:30;LP:1;LC:#0000ff;VLC:%2
- 63 http://www.google.co.jp/
- 62 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBwQFjAA&url=http://d.hatena.ne.jp/ser1zw/20110429/1304088291&rct=j&q=Ubuntu 11.04 右上&ei=3s_ETcDDIoeEvAPO2eGQAQ&usg=AFQjCNF_FskS4XKqKrKrosG96j_8Zej9Kg&sig2=BhfQt5qGSC_N6
- 47 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CCUQFjAA&url=http://d.hatena.ne.jp/ser1zw/20110429/1304088291&rct=j&q=ubuntu 11.04 32bit&ei=I-zHTY_EFIWgvQOC_5CaAQ&usg=AFQjCNF_FskS4XKqKrKrosG96j_8Zej9Kg&sig2=7ItEaI_VkWrhybASf5vD
- 47 http://www.google.com/cse?cx=partner-pub-9300639326172081:c6lzq8-dhwz&ie=UTF-8&sa=Search&q=ubuntu+11.04+インストール後&hl=ja
- 44 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/ser1zw/20110429/1304088291&rct=j&q= 11.04 ディレクトリ名 英語&ei=3jrGTczFHZGavAPDxZGY
- 38 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCIQFjAB&url=http://d.hatena.ne.jp/ser1zw/20110429/1304088291&rct=j&q=hatena ubuntu 11.04&ei=GVfFTZL9OY-2vQPYv8CrAQ&usg=AFQjCNF_FskS4XKqKrKrosG96j_8Zej9Kg&sig2=IyfO-cLiR6u9dNxiBFPyzg
- 37 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=ubuntu+11.04+はじめに

