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