ruby-opencvでカラーチャネルを分離したり
splitでblue,green,redを分離できるのだけど、シングルプレーンからIplImage.merge(blue,green,red,nil)とかしても、BGR画像を復元できない。
何故??
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("inp") red = GUI::Window.new("red") gre = GUI::Window.new("green") blu = GUI::Window.new("blue") 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 inp = cap.query break unless inp win.show inp b,g,r = inp.split red.show r gre.show g blu.show b bgr = inp.avg # 各カラープレーン毎に平均をとる # ravg,gavg,bavg = bgr[2],bgr[1],bgr[0] if ravg > gavg if ravg > bavg puts("赤っぽい") else puts("青っぽい") end else if gavg > bavg puts("緑っぽい") else puts("青っぽい") end end key = GUI::wait_key(frame_msec) mode = key.chr if key break if mode == 'q' end