module OpenCVColor
Constants
- VERSION
Public Instance Methods
cluster_colors(colors, max_distance=20)
click to toggle source
# File lib/opencv-color.rb, line 82 def cluster_colors(colors, max_distance=20) clusters = [] colors.each do |cs| cs.each do |color| cluster = clusters.find do |cluster| cluster.distance(color) < max_distance end if cluster cluster << color else clusters << Cluster.new(color) end end end clusters end
color_name(path, i)
click to toggle source
# File lib/opencv-color.rb, line 118 def color_name(path, i) "#{File.basename(path).downcase.gsub(/[^a-z_]/, '_')}_#{i}" end
colors(img)
click to toggle source
# File lib/opencv-color.rb, line 127 def colors(img) Colors.new(img) end
learn(dir)
click to toggle source
# File lib/opencv-color.rb, line 106 def learn(dir) ret = samples(dir).inject({}) do |memo, cd| color_dir, files = cd colors = files.map(&method(:load_image_colors)) cluster_colors(normalize_colors(colors)).each_with_index do |cluster, i| memo[color_name(color_dir, i)] = cluster.color_range end memo end Hash[ret] end
load_image_colors(file)
click to toggle source
# File lib/opencv-color.rb, line 122 def load_image_colors(file) img = IplImage.load(file, OpenCV::CV_LOAD_IMAGE_ANYCOLOR | OpenCV::CV_LOAD_IMAGE_ANYDEPTH) colors(img.BGR2HSV) end
normalize_colors(colors)
click to toggle source
# File lib/opencv-color.rb, line 75 def normalize_colors(colors) size = colors.map(&:size).min colors.map do |cs| cs.to_a.shuffle.first(size) end end
samples(dir)
click to toggle source
# File lib/opencv-color.rb, line 100 def samples(dir) Dir["#{dir}/*"].map do |color| [color, Dir["#{color}/*"]] end end