金曜日, 3月 28, 2008

Rmagickを使って使って一括イメージ編集

どうも、totugekilunaです。

さて、皆様ImageMagickというツールをご存知でしょうか?
普通画像を編集するのには、Paintなどの画像編集ツールを用いて行うのですが、それをコマンドライン場で行ってしまおうというものです。 むろん、動作は高速でありますが、画像編集ツールみたいな細かい編集は不可能だと思います。(ドキュメントを読んでおりませんので、何ともいえませんが)

今回は多くの画像の中から目的の画像だけを切り出し、透過処理を行い、PNG化まで持ってくというまでをやりたいと思います。
過程


  1. ImageMagickのインストール

  2. Rubyのインストール

  3. Gemのインストール

  4. Rmgickのインストール

  5. vim+ruby+その他のオプションを指定したvimのインストール



  1. ImageMagickのインストール

  2. この作業の前にMacOSXの開発環境(DVD同梱)とMacPortsが入っているということを前提とします。 入れ方に関してはほかのサイトをみてやるか、過去の記事を参照してください。


    port install ImageMagick
    これで関連するライブラリも一緒に入れてくれますが、私がやったときには、jpeg2のファイルがなかったのでそれを野良から持ってきました。
    入れる場所:/opt/local/var/macports/distfiles/パッケージ名

    このときPATHの設定も行ってください。


  3. Rubyのインストール


  4. MacOSXやLinuxの場合は最初からRubyが入っていますが、MacOSXのTigerの場合はRubyが使い物にならないものが入ってますので、それの代わりにPortsで新しいRubyを入れます。

    port install ruby

  5. Gemのインストール


  6. GemのインストールをPortsにて行います。

    ports install rb-rubygems

  7. Rmgickのインストール


  8. Rmagickはgemよりインストール

    gem install rmagick

  9. vim+ruby+その他のオプションを指定したvimのインストール


  10. port install vim +ruby+その他のオプション(好きな用に)



ここから本題

画像を一枚あげます。こういう画像が連続して続いているものと考えてください。




まだこのImageMagickを操作するRmagickのライブラリに関してのドキュメントを読んでないので何ともいえないのですが、作業を進めていきましょう。(ドキュメントを読むところから)
Rmagick公式ドキュメント
というわけで、読み進めながら作業を進めましょう。

ちょっと雑談なのですが、こういうときにデュアルディスプレイだと片方にドキュメント片方にメモ(このブログ)んで、メモの画面に作業場とするとかなり作業がはかどると思いますよ(経験談)

まず最初にirbでHow to Useのをやってみるのが常ですが、MacOSXでは注意が必要です。 パスの指定が、現在のパスが前にきている場合 PATH=$PATH:/opt/local/bin等になっている場合は、MacOSX側のirbが使用されライブラリ等もそちらのが利用されます。私はライブラリの共有方法を知らないので、わざわざ/opt側で完結させるようにしております。無駄ですがほかに方法を知りません(調べてません)

ちょっと、How to Useからソースコード抜粋
1. require 'RMagick'
2. include Magick
3.
4. cat = ImageList.new("Cheetah.jpg")
5. cat.display
6. exit
となっておりました。
そうすると、MacOSXの場合X11が立ち上がり画像が表示されました。
まぁ、ちゃんと動いているみたいなので作業を続けます。

まずは画像の切り出し

くまくまーsの記事でRmagickのCropっていうメソッドをみた気がしますので、それの使い方をみてみましょう(RmagickのAPIは膨大なためいちいちすべてのものをみていると気が遠くなります。)

ここで問題発生 くまくまーsのところで紹介しているのはほかのライブラリを使っての顔の認識だったですが、これを使わせていただくことにします(ただし、OpenCVのRuby Wrapperを作っている人はまた別の
このサイトの方だそうです)
えーちょっと、回り道をしておりますが、ふと気づきました。 この画像の中にはいくつかのにたような形があるわけです。 現在のクランマークそして、選択しているクランマーク
これでは、最低でも1枚の画像につき2枚はよけいなものが紛れ込んでしまう可能性が。あるわけでして。
ん?でも同一の画像であれば削除っていうことにすれば問題ないかw

というわけで、OpenCVとobjectdetectのインストールを待ちます

OpenCVのビルドすげぇ時間かかりますので、ご注意を

インストールも終わりましたので、作業を再開します。