その他
    ホーム 技術発信 DoRuby RMagick を使って写真の特定色域を別の色で塗りつぶす
    RMagick を使って写真の特定色域を別の色で塗りつぶす
     

    RMagick を使って写真の特定色域を別の色で塗りつぶす

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちは。

    KBMJの佐藤です。

    今回は RMagick を使って、写真の特定色域を別の色で塗りつぶしてみます。

    ImageMagick とは

    ImageMagick とは、画像ファイルを加工するための機能を提供してくれるプログラムです。

    RMagick とは

    RMagick とは、ImageMagick を ruby で扱えるようにしたものです。

    ImageMagick のインストール

    % sudo port install ImageMagick
    

    RMagick のインストール

    % sudo gem install rmagick
    

    コードを書く

    require "rubygems"
    require "RMagick"
    
    include Magick
    
    img = ImageList.new("kbmj-src.jpg")
    
    compare = Magick::Pixel.new(142*256,72*256,2*256) # この色と近い領域を探す
    replace = Magick::Pixel.new(255*256,0,0) # この色で塗りつぶす
    for y in 0...img.rows
      for x in 0...img.columns
        src = img.pixel_color(x, y) # 元画像のピクセルを取得
    
        dr = src.red - compare.red # 赤要素の差
        dg = src.green - compare.green # 緑要素の差
        db = src.blue - compare.blue # 青要素の差
    
        # RGB空間上において2つの色が近ければ置換する
        img.pixel_color(x, y, replace) if dr*dr + dg*dg + db*db < (30*256*30*256)*3
      end
    end
    
    img.write("kbmj-out.jpg")
    

    処理対象の画像を用意する

    今回は弊社のパンフレットをiPhoneのカメラで撮影したものを用意しました。

    http://farm4.static.flickr.com/3416/3195992288_466c34ab2e.jpg

    処理を実行する

    % ruby rmagick.rb
    

    実行結果

    オレンジの領域が赤で塗りつぶされています。

    http://farm4.static.flickr.com/3106/3195176725_8ab26f966f.jpg

    さいごに

    RMagick を使うと Ruby で画像処理ロジックを記述できますので、irb で各種実験を行うなど、手軽に画像処理を行うことが可能です。

    皆さんも是非お試し下さい。

    個人ブログ 拡張現実ライフ