ruby
openCVとかRMagickで画像を加工してみた実験
お弁当を買いに行った時にすれ違ったお姉さんから凄くイイ香りがしていて、若干テンション高めのhiroseです。こんにちは。
最近、顔を識別するアプリが何かと話題になっています。
私も幾つか利用しているのですが、どれも操作も簡単でとても面白いものばかりですね。
複雑で特殊な処理を行う為には、商用のライブラリを用いる事もありますが、無料で提供されているopenCV使ってもある程度、面白い事ができます。
今回は、openCV、rubyを用いて簡単な画像処理の実験を行いたいと思います。
環境は、fedoraCore7で、openCV、ruby、objectdetect、RMagickがインストールされている環境を用います。
先ずは、顔画像の識別です。これで顔の座標を取得できます。
require 'objectdetect'
model = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml"
image = "photo.jpg"
# 取得できた領域の座標を出力する
puts ObjectDetect::detect(model, image)
haarcascade_frontalface_alt2.xml は顔画像を識別する為のパターンファイルです。
他にも上半身、下半身を識別するパターンファイルが用意されています。
顔画像領域は、これで取り出せるので、今度は画像を加工してみます。
require 'rubygems'
require 'RMagick'
require 'objectdetect'
model = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml"
file = "model.jpg"
faces = ObjectDetect::detect(model, file)
original = Magick::ImageList.new(file)
newImg = Magick::ImageList.new()
faces.each do |position|
x, y, width, height = position
face = original.crop(x, y, width, height)
newImg <<face
end
newImg.write('output.jpg')
↓な感じで加工できます。
![]() |
⇒ | ![]() |


