この記事はアピリッツの技術ブログ「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のカメラで撮影したものを用意しました。
処理を実行する
% ruby rmagick.rb
実行結果
オレンジの領域が赤で塗りつぶされています。
さいごに
RMagick を使うと Ruby で画像処理ロジックを記述できますので、irb で各種実験を行うなど、手軽に画像処理を行うことが可能です。
皆さんも是非お試し下さい。
個人ブログ 拡張現実ライフ