mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
fix inpaint example
This commit is contained in:
parent
873a848acf
commit
96c63eac86
1 changed files with 25 additions and 10 deletions
|
@ -2,41 +2,56 @@
|
||||||
# inpaint.rb
|
# inpaint.rb
|
||||||
require "rubygems"
|
require "rubygems"
|
||||||
require "opencv"
|
require "opencv"
|
||||||
|
|
||||||
include OpenCV
|
include OpenCV
|
||||||
|
|
||||||
owindow = GUI::Window.new "original"
|
puts <<EOS
|
||||||
mwindow = GUI::Window.new "mask"
|
Inpainting sample
|
||||||
iwindow = GUI::Window.new "inpaint"
|
|
||||||
|
|
||||||
image = IplImage::load "inpaint.png"
|
Usage:
|
||||||
|
'dilate' bar - Adjust mask to inpaint (Non-black areas indicate the area that needs to be inpainted).
|
||||||
|
'radius' bar - Adjust radius of a circular neighborhood of each point inpainted.
|
||||||
|
'n' key - Inpaint using Navier-Stokes based method
|
||||||
|
't' key - Inpaint using Alexandru Telea's method
|
||||||
|
'c' key - Clear the inpaint window
|
||||||
|
'ESC' key - exit"
|
||||||
|
EOS
|
||||||
|
|
||||||
|
owindow = GUI::Window.new('original')
|
||||||
|
mwindow = GUI::Window.new('mask')
|
||||||
|
iwindow = GUI::Window.new('inpaint')
|
||||||
|
|
||||||
|
image = IplImage::load('inpaint.png')
|
||||||
|
noimage = image.zero
|
||||||
b, g, r = image.split
|
b, g, r = image.split
|
||||||
original_mask = r.threshold(0x00, 0xFF, CV_THRESH_BINARY_INV) & b.threshold(0x00, 0xFF, CV_THRESH_BINARY_INV)
|
original_mask = r.threshold(0x00, 0xFF, CV_THRESH_BINARY_INV) & b.threshold(0x00, 0xFF, CV_THRESH_BINARY_INV)
|
||||||
mask = original_mask.copy
|
mask = original_mask.copy
|
||||||
|
|
||||||
num_dilate = 3
|
num_dilate = 3
|
||||||
radius = 5
|
mwindow.set_trackbar("dilate", 10, num_dilate) { |v|
|
||||||
dilate_bar = mwindow.set_trackbar("dilate", 10, num_dilate){|v|
|
|
||||||
num_dilate = v
|
num_dilate = v
|
||||||
mask = original_mask.dilate(nil, num_dilate)
|
mask = original_mask.dilate(nil, num_dilate)
|
||||||
mwindow.show mask
|
mwindow.show mask
|
||||||
}
|
}
|
||||||
|
|
||||||
radius_bar = mwindow.set_trackbar("radius", 30, radius){|v|
|
radius = 5
|
||||||
|
mwindow.set_trackbar("radius", 10, radius) { |v|
|
||||||
radius = v
|
radius = v
|
||||||
}
|
}
|
||||||
|
|
||||||
owindow.show image
|
owindow.show image
|
||||||
mwindow.show mask
|
mwindow.show mask
|
||||||
|
iwindow.show noimage
|
||||||
|
|
||||||
while key = GUI::wait_key
|
while key = GUI::wait_key
|
||||||
case key.chr
|
case key.chr
|
||||||
when "\e" # esc
|
when "\e" # esc
|
||||||
exit
|
exit
|
||||||
when "n"
|
when "n"
|
||||||
iwindow.show image.inpaint_ns(mask, radius)
|
iwindow.show image.inpaint(:ns, mask, radius)
|
||||||
when "t"
|
when "t"
|
||||||
iwindow.show image.inpaint_telea(mask, radius)
|
iwindow.show image.inpaint(:telea, mask, radius)
|
||||||
|
when "c"
|
||||||
|
iwindow.show noimage
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue