ruby

ハフ変換

ruby-opencvでハフ変換をして、画像の線分抽出をする。 require "opencv" include OpenCV original_window = GUI::Window.new "original" hough_windowS = GUI::Window.new "hough(standard)" hough_windowP = GUI::Window.new "hough(probabilistic)" img =…

シングルプレーンの取り出しとマージ

OpenCV 2.4.11(VS10), ActiveScriptRuby 2.2(32bit), ruby-opencv-0.0.14RGB画像から、Gプレーンのみ取り出し、RとBをゼロで埋めた画像を作成したいのだけど、感覚的に書いたコードだとエラーが出る。b,g,r = img.split b2 = IplImage.merge(b) g2 = IplImag…

ruby-opencvでマウスイベント処理

require 'opencv' include OpenCV w = GUI::Window.new("w") img = IplImage.new(340, 200, CV_8U, 3) img.fill!(CvColor::White) # 真白に塗り潰す # p = nil opt = {:color=>CvColor::Green, :thickness=>1} w.on_mouse do |m| # 左クリックで線を太くする…

ruby-opencvで図形描画

require 'opencv' include OpenCV w = GUI::Window.new("w") img = IplImage.new(340, 200, CV_8U, 3) img.fill!(CvColor::White) # 真白に塗り潰す # img.line!(CvPoint.new(10,140),CvPoint.new(330,190), {:color=>CvColor::Red,:thickness=>4}) img.rect…

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.sh…

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

カメラで絵を取り込みながら、或いは動画を再生させながら、キーを押して、色々なフィルタを試す。 require 'opencv' include OpenCV captureDevice,mode = 0,nil if ARGV.size > 0 captureDevice = ARGV.shift captureDevice = captureDevice.to_i if /^\d$…

ruby-opencvでのROIの操作

OpenCVには「ROI」(Region Of Interest:注目領域)という概念があり、画像に対してこれを設定すると、その領域に対してのみ種々の操作が行なわれる様になる。ROIを設定している状態で画像を描画させるとROIの部分のみ描画されるし、copyを行なうとROIの部分の…

irbからOpenCVを叩く

irbを使うとObject.methodsでメソッド一覧も確認できるし、フィルタの効果の確認とかもすぐできるし便利。 irb(main):001:0> require 'opencv';include OpenCV => Object irb(main):002:0> img=CvMat.load("Tulip.jpg") => #<OpenCV::CvMat:0x7d2080> irb(main):003:0> w=GUI::Window</opencv::cvmat:0x7d2080>…

ruby-opencvでキャプチャ動画を保存

引数指定したデバイスorファイルを動画保存する。 require 'opencv' include OpenCV captureDevice = 0 if ARGV.size > 0 captureDevice = ARGV.shift captureDevice = captureDevice.to_i if /^\d$/ =~ captureDevice end win = GUI::Window.new("win") cap…

ruby-opencvでtrackbarを使って色々なパラメータを試す

Cで書くよりrubyで書いた方が、トラックバーも簡単に使える。 require 'opencv' include OpenCV inp_win = GUI::Window.new('Input') out_win = GUI::Window.new('Output') filename = ARGV.shift inp_img = CvMat.load(filename) inp_win.show inp_img out_…

ruby-opencvでカメラキャプチャして画像加工

require 'opencv' include OpenCV win = GUI::Window.new("win") cap = CvCapture.open(0) mode = nil loop do out = img = cap.query next unless img case mode when 'c'; out = img.BGR2GRAY.canny(120,200) end win.show out key = GUI::wait_key(100) i…

ruby-opencvで動画ファイル再生

『Class: OpenCV::CvCapture ― Documentation for ruby-opencv (0.0.14)』 http://www.rubydoc.info/gems/ruby-opencv/OpenCV/CvCapture require 'opencv' include OpenCV vid = CvCapture.open(ARGV.shift) win = GUI::Window.new('win') printf("%d x %d, …

ruby-opencvのサンプルソースとか

ruby-opencvの残念なのは、ドキュメントとか情報が少ないところ。 でも、標準添付の examples だけでも実は結構情報がある。一通り眺めるだけで、かなり色々できる。 irbから動かして、どんなメソッドがあるか調べることもできるし…で、ドキュメントを充実さ…

Windows7にruby-opencv環境のセッティング

色々調べたりトライしたりした結果、Windows7では32bit/64bitによらず下記の環境が一番良さそうなことがわかった。 OpenCV-2.4.11 Microsoft VisualStudio Express 10 ActiveScriptRuby 2.2(32bit版) cygwin ruby でビルドする方法もあるが、パッチを当てる…

シーケンス図をテキストで出力する

PlantUMLをインストールしてみたのだけど、シーケンス図をテキスト形式で出力時に、日本語が含まれると表示がずれる。 まあ大抵の場合png出力で確認するとはいえ、なんか微妙にはがゆいので、日本語専用でPlantUMLのシーケンス図を出力するスクリプトを書い…

cygwin ruby1.9.3 と win32-clipboard-0.5.2

cygwin Ruby1.9.3 環境に win32-clipboard を gem install してみたんだが 日本語の出し入れができなくなってる。で、とりあえず動作する様にしてみる。/usr/lib/ruby/gems/1.9.1/gems/win32-clipboard-0.5.2/lib/win32/clipboard.rb --- clipboard.rb.org 2…

zipgrep.rb

#!/usr/bin/ruby -Ks # -*- coding: shift_jis -*- P={#[Prefectures] '0'=>'愛知県', #..snip.. 'wc'=>'z邑智郡邑南町' } def get_prefs(firstChar) open(firstChar) do |f| cities = [] f.each do |l| a = l.split(/,/) cities << a[1] end prefs = [] cit…

ハイパーリンク設定が有効にならない…

Ruby から win32ole で Excelファイルを弄り、ハイパーリンク設定をして保存するも、ハイパーリンクが有効にならない…ということで悩む。今迄フツーに Hyperlinks.Add()でハイパーリンク設定できてたのに… $xl = WIN32OLE.new("Excel.Application") wb = $xl…

郵便番号表

http://www.post.japanpost.jp/zipcode/dl/kogaki.html郵便番号/住所の全国データをDLしてみる。こんな感じ↓。 01101,"060 ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0 01101,"064…

Qt Embedded によるボタンメニュー

昔、Windowsでも動く様に、Qtでも動くバージョンを作っていた気がする…Qt と QtEmbedded 、色々違うんだよね… def select_qt(&block) require 'qte' require 'qpe' @a = Qpe::QPEApplication.new([$0]+ARGV) @a.setDefaultCodec(QTextCodec::codecForName("u…

cursesでメニュー

@@SelChars = ['0'..'9','a'..'z','A'..'Z'].inject([]){|i,j|i.push(*j.to_a)} def select_cu(&block) require "curses" ch = "" Curses.init_screen() begin while true @@SelChars.size.times do |i| break if i >= @menu.size Curses.setpos(i % 20 , i …

Ruby/Tkでボタンメニューを出す

Threadを使って、ボタン押下時に与えられたブロックを実行させてるのだけど、美しくない。もう少しエレガントな方法はないものか。 def select_tk(&block) require 'tk' ret = -1 pt = Thread.current # ct = Thread.new do b = Array.new(@menu.size) Tk.ro…

VisualuRubyでボタンメニューを出す

def select_vr(&block) require 'vr/vruby' require "vr/vrcontrol" frm = VRLocalScreen.newform $menu = @menu $block = block $ret = 0 def frm.construct self.caption= $0 $menu.size.times do |i| addControl(VRButton,"b"+i.to_s,$menu[i],4,20*i,300…

araMenu

「メニュー表示→選択実行」をお手軽に実現できる様に、araMenu.rb というのを作って使っている。例えば、 a = %w(http://www.goo.ne.jp http://www.yahoo.co.jp http://google.com) AraMenu.new(a).select{|i| `fiber #{a[i]}`} てな感じで実行すると、渡し…

Rubyとデザインパターン

本職は泥臭い組込みプログラマなので、Rubyとかのオブジェクト指向プログラミング言語をいじるのは完全に趣味の世界。 なので、私のデザインパターンに関する理解は浅薄で、GoF本やら結城本やらオルセン『Rubyによるデザインパターン』やら読んで、後はWEBの…

2年前の記事に今頃気付く。

『まつもと直伝 プログラミングのオキテ 第8回 - まつもと直伝 プログラミングのオキテ:ITpro』 http://itpro.nikkeibp.co.jp/article/COLUMN/20070608/274002/?ST=oss&P=3この記事、たまに読んでた。でも、デザインパターンについて結構良いことが書いてあ…

emacsからirbを使う

Emacs上から run-ruby して、irbを使ってる。C-jでshellコマンドを実行したりする様にして、shellみたいな使い方をしてる。 irb-shell や rush も面白そうだと思うけど、フツーのirbの機能+shell機能だけあれば良いんで。で、プロンプトにカレントディレクト…

w32apis.rb

ちょっと改造。 require 'Win32API' class W32APIs attr_reader :apis attr_accessor :incpath include Enumerable @@h = { 'int'=>'I', #..snip.. 'WCHAR'=>'H', } def each(&block) @apis.each{|k,v| yield k,v} end def initialize(incs={'winuser.h'=>'u…

w32apis.rb

よくRubyから win32apiを呼び出して使用する。しかし、その度に Win32API.newするのが面倒なので、下記の様なラッパーを使ってる。こうやっとくと、「require 'w32apis';w=W32APIs.new」とかするだけで、w.MessageBoxA(0,"Hello, World.","",0) とかして API…

classを一つにまとめてみる。

SAPI4, SAPI5, AquesTalkのどれかしか入っていない環境でも動作する様に一つにまとめてみる。下記を tts.rb という名前で ruby libpath に置いて、ruby -rtts 'Tts.speak "お帰りなさいませ、御主人様"' とかすると、(何らかの音声合成エンジンが入ってたら)…