opencv-color 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/bin/opencv-color +11 -4
- data/color-samples.tb +15 -0
- data/color-samples/{light-blue → blue-light}/light-blue1.png +0 -0
- data/color-samples/{light-blue → blue-light}/light-blue2.png +0 -0
- data/color-samples/{light-blue → blue-light}/light-blue3.png +0 -0
- data/color-samples/{light-blue → blue-light}/light-blue4.png +0 -0
- data/color-samples/{light-blue → blue-light}/light-blue5.png +0 -0
- data/color-samples/{light-blue → blue-light}/light-blue61.png +0 -0
- data/color-samples/{light-blue → blue-light}/light-blue7.png +0 -0
- data/color-samples/green-dark/darkgreen1.png +0 -0
- data/color-samples/green-dark/darkgreen2.png +0 -0
- data/color-samples/green-dark/darkgreen3.png +0 -0
- data/color-samples/purple/purple1.png +0 -0
- data/color-samples/purple/purple10.png +0 -0
- data/color-samples/purple/purple2.png +0 -0
- data/color-samples/purple/purple3.png +0 -0
- data/color-samples/purple/purple4.png +0 -0
- data/color-samples/purple/purple5.png +0 -0
- data/color-samples/purple/purple6.png +0 -0
- data/color-samples/purple/purple7.png +0 -0
- data/color-samples/purple/purple8.png +0 -0
- data/color-samples/purple/purple9.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow1.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow2.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow3.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow4.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow5.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow6.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow7.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow8.png +0 -0
- data/color-samples/{dark-yellow → yellow-dark}/dark-yellow9.png +0 -0
- data/color-samples/{light-yellow → yellow-light}/light-yellow1.png +0 -0
- data/color-samples/{light-yellow → yellow-light}/light-yellow2.png +0 -0
- data/color-samples/{light-yellow → yellow-light}/light-yellow3.png +0 -0
- data/color-samples/{light-yellow → yellow-light}/light-yellow4.png +0 -0
- data/lib/opencv-color.rb +84 -31
- data/lib/opencv-color/version.rb +1 -1
- data/opencv-color.gemspec +1 -0
- data/test/opencv_color_test.rb +95 -0
- metadata +54 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3946cad363e3d99564e4160626524cc759f53827
|
4
|
+
data.tar.gz: 97cc778daa0740ea60e451a5f6a98e60bb1fd0d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd4c2c695f82da3731016169fe6da72128b72231ecbb9ffa7a449f3771d9a03cc422360fd5f3789ef65d5d6f2b6c48e6ef3dafb3bce2246f8b42493c8ef4c50b
|
7
|
+
data.tar.gz: 5a47009144dc0164cf9ae034aee8290e03e83896f213602e2540c094f6c1cfa5112984305944af8e9c03741ac571100fdecbb5f09300111f0139da55a2e60d80
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# OpenCVColor
|
2
2
|
|
3
|
+
[Built with :yellow_heart: and :coffee: in San Francisco](http://getmingle.io)
|
4
|
+
|
3
5
|
OpenCV is a great library for writing Computer Vision software. However, OpenCV's HSV format is different than what you would expect! This gem trys to learn HSV color range from sample images for your OpenCV program to detect color.
|
4
6
|
|
5
7
|
## Installation
|
data/bin/opencv-color
CHANGED
@@ -7,6 +7,7 @@ require 'erb'
|
|
7
7
|
#add lib for test environment
|
8
8
|
if File.exists?(File.expand_path(File.dirname(__FILE__) + '/../lib/opencv-color.rb'))
|
9
9
|
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
10
|
+
require 'rubygems'
|
10
11
|
end
|
11
12
|
|
12
13
|
begin
|
@@ -19,12 +20,12 @@ end
|
|
19
20
|
require 'optparse'
|
20
21
|
|
21
22
|
options = {
|
22
|
-
format: '
|
23
|
+
format: 'table'
|
23
24
|
}
|
24
25
|
op = OptionParser.new do |opts|
|
25
26
|
opts.banner = "Usage: opencv-color [options] <sample images directory path>"
|
26
27
|
|
27
|
-
opts.on("-f", "--format [FORMAT]", "Output format 'yaml' or 'objc', default is
|
28
|
+
opts.on("-f", "--format [FORMAT]", "Output format 'yaml', 'table' or 'objc', default is table") do |format|
|
28
29
|
options[:format] = format
|
29
30
|
end
|
30
31
|
|
@@ -44,11 +45,17 @@ unless File.directory?(sample_images_dir)
|
|
44
45
|
exit(-1)
|
45
46
|
end
|
46
47
|
|
47
|
-
data = OpenCVColor.learn(sample_images_dir)
|
48
|
+
data = OpenCVColor.learn(sample_images_dir).sort_by{|k,v|v[:low][0]}
|
48
49
|
puts case options[:format]
|
49
50
|
when 'objc'
|
50
51
|
template = File.join(File.dirname(__FILE__), '..', 'lib', 'opencv-color', 'objc.erb')
|
51
52
|
ERB.new(File.read(template)).result(binding)
|
52
|
-
|
53
|
+
when 'yaml'
|
53
54
|
YAML.dump(data)
|
55
|
+
when 'table'
|
56
|
+
require 'terminal-table'
|
57
|
+
rows = data.map {|k,v| [k, v[:low], v[:high], v[:mean].map(&:to_i), v[:sd].map(&:to_i)]}
|
58
|
+
table = Terminal::Table.new :headings => ["Color", "Low", "High", "Mean", "SD"], :rows => rows
|
59
|
+
else
|
60
|
+
puts "Unknown format: #{options[:format].inspect}"
|
54
61
|
end
|
data/color-samples.tb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
+----------------+----------------+-----------------+----------------+-------------+
|
2
|
+
| Color | Low | High | Mean | SD |
|
3
|
+
+----------------+----------------+-----------------+----------------+-------------+
|
4
|
+
| pink_0 | [0, 44, 203] | [5, 75, 255] | [1, 59, 232] | [0, 4, 9] |
|
5
|
+
| yellow_dark_0 | [23, 211, 196] | [27, 255, 255] | [24, 233, 229] | [0, 7, 10] |
|
6
|
+
| yellow_light_0 | [25, 57, 178] | [31, 117, 255] | [27, 87, 232] | [0, 9, 18] |
|
7
|
+
| yellow_green_0 | [28, 87, 146] | [33, 141, 255] | [30, 114, 217] | [0, 8, 23] |
|
8
|
+
| green_0 | [28, 30, 182] | [40, 179, 255] | [33, 104, 222] | [1, 24, 13] |
|
9
|
+
| yellow_0 | [29, 192, 208] | [33, 218, 255] | [30, 205, 235] | [0, 4, 9] |
|
10
|
+
| green_dark_0 | [85, 137, 97] | [92, 159, 117] | [88, 147, 107] | [0, 3, 3] |
|
11
|
+
| blue_light_0 | [89, 35, 129] | [97, 87, 255] | [93, 60, 217] | [1, 8, 29] |
|
12
|
+
| blue_0 | [95, 98, 143] | [100, 153, 238] | [97, 125, 190] | [0, 9, 15] |
|
13
|
+
| purple_0 | [117, 7, 125] | [130, 58, 194] | [123, 32, 159] | [1, 8, 11] |
|
14
|
+
| pink_1 | [177, 49, 220] | [179, 68, 253] | [178, 58, 236] | [0, 3, 5] |
|
15
|
+
+----------------+----------------+-----------------+----------------+-------------+
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/opencv-color.rb
CHANGED
@@ -23,55 +23,108 @@ module OpenCVColor
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
class Cluster
|
27
|
+
def initialize(color)
|
28
|
+
@h, @s, @v = [], [], []
|
29
|
+
@hs = 0
|
30
|
+
self << color
|
31
|
+
end
|
32
|
+
|
33
|
+
def <<(color)
|
34
|
+
@h << color[0]
|
35
|
+
@s << color[1]
|
36
|
+
@v << color[2]
|
37
|
+
@hs += color[0]
|
38
|
+
end
|
39
|
+
|
40
|
+
def distance(color)
|
41
|
+
(center - color[0]).abs
|
42
|
+
end
|
43
|
+
|
44
|
+
def center
|
45
|
+
@hs / @h.size
|
46
|
+
end
|
47
|
+
|
48
|
+
def colors
|
49
|
+
[@h, @s, @v]
|
50
|
+
end
|
51
|
+
|
52
|
+
def color_range
|
53
|
+
memo = {low: [], high: [], mean: [], sd: []}
|
54
|
+
colors.map(&:to_scale).each_with_index do |d, index|
|
55
|
+
sd = d.sd
|
56
|
+
mean = d.mean
|
57
|
+
|
58
|
+
memo[:low] << ([mean - 3 * sd, 0.0].max).floor
|
59
|
+
memo[:high] << ([mean + 3 * sd, max_value(index)].min).ceil
|
60
|
+
memo[:mean] << mean
|
61
|
+
memo[:sd] << sd
|
62
|
+
end
|
63
|
+
memo
|
64
|
+
end
|
65
|
+
|
66
|
+
def max_value(i)
|
67
|
+
# H => 0
|
68
|
+
i == 0 ? 179.0 : 255.0
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
26
72
|
include OpenCV
|
27
73
|
|
28
74
|
module_function
|
29
|
-
def
|
30
|
-
|
31
|
-
|
75
|
+
def normalize_colors(colors)
|
76
|
+
size = colors.map(&:size).min
|
77
|
+
colors.map do |cs|
|
78
|
+
cs.to_a.shuffle.first(size)
|
32
79
|
end
|
33
80
|
end
|
34
81
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
82
|
+
def cluster_colors(colors, max_distance=20)
|
83
|
+
clusters = []
|
84
|
+
colors.each do |cs|
|
85
|
+
cs.each do |color|
|
86
|
+
cluster = clusters.find do |cluster|
|
87
|
+
cluster.distance(color) < max_distance
|
88
|
+
end
|
89
|
+
|
90
|
+
if cluster
|
91
|
+
cluster << color
|
92
|
+
else
|
93
|
+
clusters << Cluster.new(color)
|
43
94
|
end
|
44
95
|
end
|
45
|
-
|
46
|
-
|
47
|
-
sd = g.sd
|
48
|
-
mean = g.mean
|
49
|
-
memo[:low] << ([mean - 3 * sd, min_value].max).floor
|
50
|
-
memo[:high] << ([mean + 3 * sd, max_value(index)].min).ceil
|
51
|
-
memo[:mean] << mean
|
52
|
-
memo[:sd] << sd
|
53
|
-
memo
|
54
|
-
end
|
55
|
-
[color_name(color_dir), range]
|
56
|
-
end]
|
96
|
+
end
|
97
|
+
clusters
|
57
98
|
end
|
58
99
|
|
59
|
-
def
|
60
|
-
|
100
|
+
def samples(dir)
|
101
|
+
Dir["#{dir}/*"].map do |color|
|
102
|
+
[color, Dir["#{color}/*"]]
|
103
|
+
end
|
61
104
|
end
|
62
105
|
|
63
|
-
def
|
64
|
-
|
106
|
+
def learn(dir)
|
107
|
+
ret = samples(dir).inject({}) do |memo, cd|
|
108
|
+
color_dir, files = cd
|
109
|
+
colors = files.map(&method(:load_image_colors))
|
110
|
+
cluster_colors(normalize_colors(colors)).each_with_index do |cluster, i|
|
111
|
+
memo[color_name(color_dir, i)] = cluster.color_range
|
112
|
+
end
|
113
|
+
memo
|
114
|
+
end
|
115
|
+
Hash[ret]
|
65
116
|
end
|
66
117
|
|
67
|
-
def
|
68
|
-
#
|
69
|
-
i == 0 ? 179 : 255
|
118
|
+
def color_name(path, i)
|
119
|
+
"#{File.basename(path).downcase.gsub(/[^a-z_]/, '_')}_#{i}"
|
70
120
|
end
|
71
121
|
|
72
122
|
def load_image_colors(file)
|
73
123
|
img = IplImage.load(file, OpenCV::CV_LOAD_IMAGE_ANYCOLOR | OpenCV::CV_LOAD_IMAGE_ANYDEPTH)
|
74
|
-
|
124
|
+
colors(img.BGR2HSV)
|
75
125
|
end
|
76
126
|
|
127
|
+
def colors(img)
|
128
|
+
Colors.new(img)
|
129
|
+
end
|
77
130
|
end
|
data/lib/opencv-color/version.rb
CHANGED
data/opencv-color.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency('ruby-opencv', "~> 0.0.13")
|
22
22
|
spec.add_dependency('statsample', "~> 1.4.0")
|
23
|
+
spec.add_dependency('terminal-table', "~> 1.4.5")
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.7"
|
24
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
26
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
|
3
|
+
require "opencv-color"
|
4
|
+
|
5
|
+
class TestOpencvColor < MiniTest::Test
|
6
|
+
|
7
|
+
class Image
|
8
|
+
def initialize(data)
|
9
|
+
@data = data
|
10
|
+
end
|
11
|
+
|
12
|
+
def width
|
13
|
+
height == 0 ? 0 : @data[0].size
|
14
|
+
end
|
15
|
+
|
16
|
+
def height
|
17
|
+
@data.size
|
18
|
+
end
|
19
|
+
|
20
|
+
def [](i, j)
|
21
|
+
@data[i][j]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_cluster_colors
|
26
|
+
image1 = Image.new([
|
27
|
+
[[0,1,1], [1,1,1]],
|
28
|
+
[[189,1,1], [190,1,1]]
|
29
|
+
])
|
30
|
+
|
31
|
+
clusters = OpenCVColor.cluster_colors([OpenCVColor.colors(image1)])
|
32
|
+
assert_equal 2, clusters.size
|
33
|
+
assert_equal [[0,1], [1,1],[1,1]], clusters[0].colors
|
34
|
+
assert_equal [[189,190], [1,1], [1,1]], clusters[1].colors
|
35
|
+
|
36
|
+
image2 = Image.new([
|
37
|
+
[[0,1,1], [1,1,1], [5,1,1], [111, 1, 1]],
|
38
|
+
[[3,1,1], [180,1,1], [100,1,1], [115,1,1]]
|
39
|
+
])
|
40
|
+
|
41
|
+
clusters = OpenCVColor.cluster_colors([OpenCVColor.colors(image1), OpenCVColor.colors(image2)])
|
42
|
+
|
43
|
+
assert_equal 3, clusters.size
|
44
|
+
assert_equal [[0,1,0,1,5,3], [1,1,1,1,1,1], [1,1,1,1,1,1]], clusters[0].colors
|
45
|
+
assert_equal [[189,190,180], [1,1,1], [1,1,1]], clusters[1].colors
|
46
|
+
assert_equal [[111,100,115], [1,1,1], [1,1,1]], clusters[2].colors
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_cluster_color_range
|
50
|
+
image1 = Image.new([
|
51
|
+
[[10,10,10], [12,12,12]],
|
52
|
+
[[150,150,150], [152,152,152]]
|
53
|
+
])
|
54
|
+
clusters = OpenCVColor.cluster_colors([OpenCVColor.colors(image1)])
|
55
|
+
assert_equal [6,6,6], clusters[0].color_range[:low]
|
56
|
+
assert_equal [16,16,16], clusters[0].color_range[:high]
|
57
|
+
assert_equal [11,11,11], clusters[0].color_range[:mean]
|
58
|
+
|
59
|
+
assert_equal [146,146,146], clusters[1].color_range[:low]
|
60
|
+
assert_equal [156,156,156], clusters[1].color_range[:high]
|
61
|
+
assert_equal [151,151,151], clusters[1].color_range[:mean]
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_cluster_color_range_min_and_max_values
|
65
|
+
image1 = Image.new([
|
66
|
+
[[0,0,0], [2,2,2]],
|
67
|
+
[[175,250,250], [179,254,254]]
|
68
|
+
])
|
69
|
+
clusters = OpenCVColor.cluster_colors([OpenCVColor.colors(image1)])
|
70
|
+
assert_equal [0,0,0], clusters[0].color_range[:low]
|
71
|
+
assert_equal [6,6,6], clusters[0].color_range[:high]
|
72
|
+
assert_equal [1,1,1], clusters[0].color_range[:mean]
|
73
|
+
|
74
|
+
assert_equal [168,243,243], clusters[1].color_range[:low]
|
75
|
+
assert_equal [179,255,255], clusters[1].color_range[:high]
|
76
|
+
assert_equal [177, 252, 252], clusters[1].color_range[:mean]
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_normalize_colors_by_min_image_size
|
80
|
+
image1 = Image.new([
|
81
|
+
[[0,0,0], [2,2,2]],
|
82
|
+
[[175,250,250], [179,254,254]]
|
83
|
+
])
|
84
|
+
image2 = Image.new([
|
85
|
+
[[0,0,0]],
|
86
|
+
[[175,250,250]]
|
87
|
+
])
|
88
|
+
image3 = Image.new([
|
89
|
+
[[0,0,0],[0,0,0],[0,0,0]],
|
90
|
+
[[175,250,250],[0,0,0],[0,0,0]]
|
91
|
+
])
|
92
|
+
colors = OpenCVColor.normalize_colors([OpenCVColor.colors(image1), OpenCVColor.colors(image2), OpenCVColor.colors(image3)])
|
93
|
+
assert_equal [2,2,2], colors.map(&:size)
|
94
|
+
end
|
95
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opencv-color
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xiao Li
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-opencv
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.4.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: terminal-table
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.4.5
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.4.5
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +97,14 @@ files:
|
|
83
97
|
- Rakefile
|
84
98
|
- TODO
|
85
99
|
- bin/opencv-color
|
100
|
+
- color-samples.tb
|
101
|
+
- color-samples/blue-light/light-blue1.png
|
102
|
+
- color-samples/blue-light/light-blue2.png
|
103
|
+
- color-samples/blue-light/light-blue3.png
|
104
|
+
- color-samples/blue-light/light-blue4.png
|
105
|
+
- color-samples/blue-light/light-blue5.png
|
106
|
+
- color-samples/blue-light/light-blue61.png
|
107
|
+
- color-samples/blue-light/light-blue7.png
|
86
108
|
- color-samples/blue/blue01.png
|
87
109
|
- color-samples/blue/blue02.png
|
88
110
|
- color-samples/blue/blue2.png
|
@@ -92,31 +114,14 @@ files:
|
|
92
114
|
- color-samples/blue/blue6.png
|
93
115
|
- color-samples/blue/blue7.png
|
94
116
|
- color-samples/blue/blue8.png
|
95
|
-
- color-samples/dark
|
96
|
-
- color-samples/dark
|
97
|
-
- color-samples/dark
|
98
|
-
- color-samples/dark-yellow/dark-yellow4.png
|
99
|
-
- color-samples/dark-yellow/dark-yellow5.png
|
100
|
-
- color-samples/dark-yellow/dark-yellow6.png
|
101
|
-
- color-samples/dark-yellow/dark-yellow7.png
|
102
|
-
- color-samples/dark-yellow/dark-yellow8.png
|
103
|
-
- color-samples/dark-yellow/dark-yellow9.png
|
117
|
+
- color-samples/green-dark/darkgreen1.png
|
118
|
+
- color-samples/green-dark/darkgreen2.png
|
119
|
+
- color-samples/green-dark/darkgreen3.png
|
104
120
|
- color-samples/green/green1.png
|
105
121
|
- color-samples/green/green2.png
|
106
122
|
- color-samples/green/green3.png
|
107
123
|
- color-samples/green/green4.png
|
108
124
|
- color-samples/green/green5.png
|
109
|
-
- color-samples/light-blue/light-blue1.png
|
110
|
-
- color-samples/light-blue/light-blue2.png
|
111
|
-
- color-samples/light-blue/light-blue3.png
|
112
|
-
- color-samples/light-blue/light-blue4.png
|
113
|
-
- color-samples/light-blue/light-blue5.png
|
114
|
-
- color-samples/light-blue/light-blue61.png
|
115
|
-
- color-samples/light-blue/light-blue7.png
|
116
|
-
- color-samples/light-yellow/light-yellow1.png
|
117
|
-
- color-samples/light-yellow/light-yellow2.png
|
118
|
-
- color-samples/light-yellow/light-yellow3.png
|
119
|
-
- color-samples/light-yellow/light-yellow4.png
|
120
125
|
- color-samples/pink/pink1.png
|
121
126
|
- color-samples/pink/pink2.png
|
122
127
|
- color-samples/pink/pink3.png
|
@@ -125,9 +130,32 @@ files:
|
|
125
130
|
- color-samples/pink/pink71.png
|
126
131
|
- color-samples/pink/pink8.png
|
127
132
|
- color-samples/pink/pink9.png
|
133
|
+
- color-samples/purple/purple1.png
|
134
|
+
- color-samples/purple/purple10.png
|
135
|
+
- color-samples/purple/purple2.png
|
136
|
+
- color-samples/purple/purple3.png
|
137
|
+
- color-samples/purple/purple4.png
|
138
|
+
- color-samples/purple/purple5.png
|
139
|
+
- color-samples/purple/purple6.png
|
140
|
+
- color-samples/purple/purple7.png
|
141
|
+
- color-samples/purple/purple8.png
|
142
|
+
- color-samples/purple/purple9.png
|
143
|
+
- color-samples/yellow-dark/dark-yellow1.png
|
144
|
+
- color-samples/yellow-dark/dark-yellow2.png
|
145
|
+
- color-samples/yellow-dark/dark-yellow3.png
|
146
|
+
- color-samples/yellow-dark/dark-yellow4.png
|
147
|
+
- color-samples/yellow-dark/dark-yellow5.png
|
148
|
+
- color-samples/yellow-dark/dark-yellow6.png
|
149
|
+
- color-samples/yellow-dark/dark-yellow7.png
|
150
|
+
- color-samples/yellow-dark/dark-yellow8.png
|
151
|
+
- color-samples/yellow-dark/dark-yellow9.png
|
128
152
|
- color-samples/yellow-green/yellow-green1.png
|
129
153
|
- color-samples/yellow-green/yellow-green2.png
|
130
154
|
- color-samples/yellow-green/yellow-green3.png
|
155
|
+
- color-samples/yellow-light/light-yellow1.png
|
156
|
+
- color-samples/yellow-light/light-yellow2.png
|
157
|
+
- color-samples/yellow-light/light-yellow3.png
|
158
|
+
- color-samples/yellow-light/light-yellow4.png
|
131
159
|
- color-samples/yellow/yellow01.png
|
132
160
|
- color-samples/yellow/yellow10.png
|
133
161
|
- color-samples/yellow/yellow2.png
|
@@ -136,6 +164,7 @@ files:
|
|
136
164
|
- lib/opencv-color/objc.erb
|
137
165
|
- lib/opencv-color/version.rb
|
138
166
|
- opencv-color.gemspec
|
167
|
+
- test/opencv_color_test.rb
|
139
168
|
homepage: https://github.com/xli/opencv-color
|
140
169
|
licenses:
|
141
170
|
- MIT
|
@@ -156,8 +185,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
185
|
version: '0'
|
157
186
|
requirements: []
|
158
187
|
rubyforge_project:
|
159
|
-
rubygems_version: 2.2.
|
188
|
+
rubygems_version: 2.2.2
|
160
189
|
signing_key:
|
161
190
|
specification_version: 4
|
162
191
|
summary: Learn OpenCV HSV color range from sample images.
|
163
|
-
test_files:
|
192
|
+
test_files:
|
193
|
+
- test/opencv_color_test.rb
|