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

第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

結果はこんな感じ。いい感じにしきい値処理がされています。

f:id:ser1zw:20120216003049p:image

まとめ

そんなわけで、第5回Ruby/OpenCV進捗報告でした。

リポジトリはこちら

ruby-opencv/ruby-opencv - GitHub

人柱、Pull Request、ご要望、バグ報告等は大歓迎です!

*1:インストーラからC Compiler, C++ Compiler, MSYS Basic System, MinGW Developer Toolkitあたりを入れておけば大丈夫なはず http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/