第5回 Ruby/OpenCV進捗報告
はじめに
気がついたら2012年になってましたが、Ruby/OpenCVもじわじわと進化を続けております。
進捗
開発リポジトリが移動しました!
GitHubでOrganizationアカウントを作って、メインのリポジトリをそっちに移してみました。
そんなわけで、今後のメインリポジトリは
ruby-opencv/ruby-opencv - GitHub
になります。
ser1zw/ruby-opencv - GitHub のほうは機能追加とかするときの作業用に使う予定です。
Windows(mingw32, mswin32)に対応しました!
ようやくWindowsでも動くようになりました。
と言ってもまだバイナリ配布はしてないので、自前でのビルドが必要です。
前提条件
OpenCVのインストールが必要です。
OpenCV2.3.1の入手、ダウンロード、インストール、環境設定 | イメージングソリューションなどを参考にインストールしてください。dllのパスの設定も忘れずに!
なお、以降の説明では、OpenCVが C:\path\to\opencvdir にインストールされているものとします。
mswin32の場合
mswin32の場合はVisual C++ (Express EditionでOK)を入れて、Visual Studioコマンドプロンプトから下記のコマンドを実行します。
$ git clone git://github.com/ruby-opencv/ruby-opencv.git # またはGitHubからzipファイルをダウンロードして展開 $ cd ruby-opencv $ ruby extconf.rb --with-opencv-dir=C:\path\to\opencvdir\bin\install # 自分でビルドしたOpenCVを使う場合(バイナリ版を使う場合は下記参照) $ nmake $ nmake install
バイナリ配布されているOpenCVをそのまま使う場合は、includeフォルダが C:\path\to\opencvdir\build\include 、libフォルダが C:\path\to\opencvdir\build\x86\vc10\lib となるので、extconf.rb のオプションを
$ ruby extconf.rb --with-opencv-include=C:\path\to\opencvdir\build\include --with-opencv-lib=C:\path\to\opencvdir\build\x86\vc10\lib
みたいな感じにしてください。
mingw32の場合
mingw32の場合はMinGWのgcc, g++, MSYSを入れて*1、MSYSのコンソールから下記のコマンドを実行します。
$ git clone git://github.com/ruby-opencv/ruby-opencv.git # またはGitHubからzipファイルをダウンロードして展開 $ cd ruby-opencv $ ruby extconf.rb --with-opencv-dir=/C/path/to/opencvdir/install # 自分でビルドしたOpenCVを使う場合 $ make $ make install
mswin32と同様、バイナリ配布されているOpenCVを使う場合は、
$ ruby extconf.rb --with-opencv-include=/C/path/to/opencvdir/build/include --with-opencv-lib=/C/path/to/opencvdir/build/x86/mingw/lib
みたいな感じで指定してください。
ffcallが不要になりました!
これで余計な依存ライブラリがなくなり、インストールがちょっとだけ楽になりました。やったね!
今後の展開
とりあえず
- gem install hogehoge でインストールできるようにしたい
- rubygems.orgで公開?
- Windows用はバイナリも配布したい
- 全文検索機能付きのリファレンスを作りたい
- るりまサーチ的なやつ
- C++版の機能を追加したい
- DescriptorMatcherとか
みたいなことを考えてます。他にもこんな機能ほしい!とかありましたらお知らせください。
デモ
cvAdaptiveThresholdのラッパーを追加したので、そのサンプルコード的なやつを書いてみます。
環境は
です。
# -*- encoding: utf-8 -*- require 'opencv' include OpenCV img = IplImage.load('Lenna.jpg', CV_LOAD_IMAGE_GRAYSCALE) # CvMat#adaptive_threshold(max_value, options = nil) # max_value (Integer) - 最大値 # options (Hash) - オプションパラメータ # :adaptive_method - 使用するアルゴリズム (:mean_c または :gaussian_c) # :threshold_type - しきい値処理の種類 (:binary または :binary_inv) # :block_size - しきい値を計算するときのブロックサイズ # :param1 - 各手法で使うパラメータ result1 = img.adaptive_threshold(255, :block_size => 25) result2 = img.adaptive_threshold(128, :adaptive_method => :gaussian_c, :threshold_type => :binary_inv, :block_size => 5, :param1 => 10) GUI::Window.new('original').show img GUI::Window.new('mean_c').show result1 GUI::Window.new('gaussian_c').show result2 GUI::wait_key GUI::Window.destroy_all
結果はこんな感じ。いい感じにしきい値処理がされています。
まとめ
そんなわけで、第5回Ruby/OpenCV進捗報告でした。