opencv-color 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|