ホーム 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 で各種実験を行うなど、手軽に画像処理を行うことが可能です。

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

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

記事を共有

最近人気な記事