ruby-opencvで色々なフィルタを試す

カメラで絵を取り込みながら、或いは動画を再生させながら、キーを押して、色々なフィルタを試す。

require 'opencv'
include OpenCV
captureDevice,mode = 0,nil
if ARGV.size > 0
  captureDevice = ARGV.shift
  captureDevice = captureDevice.to_i if /^\d$/ =~ captureDevice
end
win = GUI::Window.new("win")
cap = CvCapture.open(captureDevice)
begin
  fps = cap.fps
  if fps > 67 or fps < 5 # 変なfpsの時は10fps(100msec間隔)にする
    fps = 10
  end
rescue
  fps = 10
end
frame_msec = 1000/fps
loop do
  out = inp = cap.query
  break unless inp
  case mode
  when 'a'; out = inp.BGR2GRAY.add(100)			#グレースケールにして白っぽくする
  when 'b'; out = inp.smooth(CV_BLUR)			#単純平滑化
  when 'c'; out = inp.BGR2GRAY.canny(120,200)		#canny法でエッジ抽出
  when 'd'; out = inp.BGR2GRAY.dilate			#ディレーション
  when 'e'; out = inp.BGR2GRAY.erode			#エロージョン
  when 'f'; out = inp.flip				#左右反転
  when 'g'; out = inp.smooth(CV_GAUSSIAN)		#ガウシアン平滑化
  when 'q'; break
  end
  win.show out
  key = GUI::wait_key(frame_msec)
  mode = key.chr if key
end