Ruby & OpenCVで画像処理

03 Feb 2013

Ruby & OpenCV

導入

画像を表示する

require 'opencv'
include OpenCV

if ARGV.size == 0
  puts "Usage: ruby #{__FILE__} ImageToLoadAndDisplay"
  exit
end

image = nil
begin
  image = CvMat.load(ARGV[0], CV_LOAD_IMAGE_COLOR) # Read the file.
rescue
  puts 'Could not open or find the image.'
  exit
end

window = GUI::Window.new('Display window') # Create a window for display.
window.show(image) # Show our image inside it.
GUI::wait_key # Wait for a keystroke in the window.

$ ruby sample.rb Lenna.jpegってやると画像が表示される。 画像のウィンドウで何かキーを押すと処理終了。

テンプレートマッチング

#!/usr/bin/env ruby

require 'opencv'
include OpenCV

image = OpenCV::IplImage.load("Lenna.jpeg")
template = OpenCV::IplImage.load("template.jpg")

result = image.match_template(template)
min_score, max_score, min_point, max_point = result.min_max_loc

from = min_point
to = OpenCV::CvPoint.new(from.x + template.width, from.y + template.height)
image.rectangle!(from, to, :color => OpenCV::CvColor::Black, :thickness => 1)

window = OpenCV::GUI::Window.new("canvas")
window.show image

GUI::wait_key

image.save_image("output.png")

template.jpg にマッチする範囲の境界線を黒で描く。 画像のウィンドウで何かキーを押すと output.png を出力して処理終了。