ropencv 0.0.11 → 0.0.12
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 +7 -0
- data/examples/hough_circles.rb +22 -0
- data/examples/match_keypoints.rb +33 -0
- data/examples/tsukuba_l.png +0 -0
- data/examples/tsukuba_r.png +0 -0
- data/ext/helper.rb +30 -0
- data/ext/opencv.txt +5 -5
- data/ext/rbind.rb +17 -2
- data/lib/ropencv/ropencv_ruby.rb +92 -9
- data/ropencv.gemspec +3 -3
- data/test/suite.rb +1 -0
- data/test/test_mat.rb +73 -0
- data/test/test_opencv.rb +28 -0
- metadata +51 -48
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d2e6aa5a66cdc073f75cbcef5ecdf2754dec1b9c
|
4
|
+
data.tar.gz: 78f996037687e4e836aee3f2ca2f540f79ece752
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b94532ed19232a2bd9a3758cfa13293f999fb94139b51c0b9ee5dbd742c07d82c06516c5465d4439c7d51bb920a82b791dccf9e0232bb5812d1e47b01fa32987
|
7
|
+
data.tar.gz: fd2e2023995003ccfbcd35edfc59c373d2f58dcd998828ab26ac7f21fe79d00f544167c87bb199390e774aad4a9279970ba96be9896f478e1e712e0d7fa93456
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'ropencv'
|
2
|
+
include OpenCV
|
3
|
+
|
4
|
+
img = cv::imread("logo.png")
|
5
|
+
gray = cv::Mat.new
|
6
|
+
cv::cvtColor(img,gray,CV_BGR2GRAY)
|
7
|
+
|
8
|
+
circles = cv::Mat.new
|
9
|
+
cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, gray.rows/10, 10, 20 );
|
10
|
+
circles = circles.reshape(1,circles.cols)
|
11
|
+
|
12
|
+
circles.each_row do |circle|
|
13
|
+
center = cv::Point.new(circle[0].round, circle[1].round)
|
14
|
+
radius = circle[2].round
|
15
|
+
# draw the circle center
|
16
|
+
cv::circle( img, center, 3, cv::Scalar.new(0,255,0),-1,8,0)
|
17
|
+
# draw the circle outline
|
18
|
+
cv::circle( img, center, radius, cv::Scalar.new(0,0,255),3, 8,0)
|
19
|
+
end
|
20
|
+
|
21
|
+
cv::imshow("Circles",img)
|
22
|
+
cv::wait_key(-1)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'ropencv'
|
2
|
+
include OpenCV
|
3
|
+
|
4
|
+
img1 = cv::imread('tsukuba_l.png',CV_LOAD_IMAGE_GRAYSCALE)
|
5
|
+
img2 = cv::imread('tsukuba_r.png',CV_LOAD_IMAGE_GRAYSCALE)
|
6
|
+
if (img1.empty() || img2.empty())
|
7
|
+
puts("Can't read one of the images\n")
|
8
|
+
return -1
|
9
|
+
end
|
10
|
+
|
11
|
+
keypoints1=Vector.new(cv::KeyPoint)
|
12
|
+
keypoints2=Vector.new(cv::KeyPoint)
|
13
|
+
detector = cv::FeatureDetector::create('SURF')
|
14
|
+
detector.detect(img1, keypoints1)
|
15
|
+
detector.detect(img2, keypoints2)
|
16
|
+
|
17
|
+
# computing descriptors
|
18
|
+
extractor=cv::DescriptorExtractor::create('SURF')
|
19
|
+
descriptors2=cv::Mat.new(3, 4, cv::CV_64FC1)
|
20
|
+
descriptors1=cv::Mat.new(3, 4, cv::CV_64FC1)
|
21
|
+
extractor.compute(img1, keypoints1, descriptors1)
|
22
|
+
extractor.compute(img2, keypoints2, descriptors2)
|
23
|
+
|
24
|
+
# matching descriptors
|
25
|
+
matcher= cv::BFMatcher::create('BruteForce-L1')
|
26
|
+
matches= Vector.new(cv::DMatch)
|
27
|
+
matcher.match(descriptors1, descriptors2, matches)
|
28
|
+
|
29
|
+
# drawing the results
|
30
|
+
img_matches=cv::Mat.new(3, 4, cv::CV_64FC1)
|
31
|
+
cv::drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches)
|
32
|
+
cv::imshow("matches", img_matches)
|
33
|
+
cv::waitKey(0)
|
Binary file
|
Binary file
|
data/ext/helper.rb
CHANGED
@@ -27,6 +27,36 @@ class OpenCVPtr < Rbind::RTemplateClass
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
# Template for opencv's new smart pointer
|
31
|
+
class OpenCVPtr2 < Rbind::RTemplateClass
|
32
|
+
def initialize(name="cv::Ptr")
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
def specialize(klass,*parameters)
|
37
|
+
if parameters.size != 1
|
38
|
+
raise ArgumentError,"OpenCVPtr2 does only support one template parameter. Got: #{parameters}}"
|
39
|
+
end
|
40
|
+
ptr_type = parameters.first
|
41
|
+
|
42
|
+
klass.add_operation Rbind::ROperation.new(klass.name,nil,Rbind::RParameter.new("other",klass))
|
43
|
+
klass.add_operation Rbind::ROperation.new(klass.name,nil,Rbind::RParameter.new("p",ptr_type.to_ptr))
|
44
|
+
klass.add_operation Rbind::ROperation.new("release",type("void"))
|
45
|
+
klass.add_operation Rbind::ROperation.new("reset",type("void"),Rbind::RParameter.new("p",ptr_type.to_ptr))
|
46
|
+
klass.add_operation Rbind::ROperation.new("swap",type("void"),Rbind::RParameter.new("other",klass))
|
47
|
+
klass.add_operation Rbind::ROperation.new("get",ptr_type.to_ptr)
|
48
|
+
klass.add_operation Rbind::ROperation.new("empty",type("bool"))
|
49
|
+
klass
|
50
|
+
end
|
51
|
+
|
52
|
+
def specialize_ruby_specialization(klass)
|
53
|
+
" def method_missing(m,*args)\n"\
|
54
|
+
" raise \"Ptr #{self} is empty. Cannot call \#{m} on it!\" if empty\n"\
|
55
|
+
" get.method(m).call(*args)\n"\
|
56
|
+
" end\n"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
30
60
|
class Vec < Rbind::RClass
|
31
61
|
def initialize(name,type,size)
|
32
62
|
super(name)
|
data/ext/opencv.txt
CHANGED
@@ -229,17 +229,17 @@ cv.Size.Size
|
|
229
229
|
int height
|
230
230
|
cv.Size.area int
|
231
231
|
class cv.Size2f
|
232
|
-
|
233
|
-
|
232
|
+
float width /RW
|
233
|
+
float height /RW
|
234
234
|
cv.Size2f.Size2f
|
235
235
|
cv.Size2f.Size2f
|
236
236
|
Size2f sz
|
237
237
|
cv.Size2f.Size2f
|
238
238
|
Point2f pt
|
239
239
|
cv.Size2f.Size2f
|
240
|
-
|
241
|
-
|
242
|
-
cv.Size2f.area
|
240
|
+
float width
|
241
|
+
float height
|
242
|
+
cv.Size2f.area float
|
243
243
|
cv.Rect.Rect
|
244
244
|
cv.Rect.Rect
|
245
245
|
Rect rect
|
data/ext/rbind.rb
CHANGED
@@ -13,10 +13,11 @@ rbind.includes = opencv_headers
|
|
13
13
|
rbind.parser.type_alias["const_c_string"] = rbind.c_string.to_const
|
14
14
|
if opencv_version >= "2.4.9"
|
15
15
|
rbind.add_std_types
|
16
|
+
rbind.parser.add_type OpenCVPtr2.new
|
16
17
|
else
|
17
18
|
rbind.add_std_vector
|
19
|
+
rbind.parser.add_type OpenCVPtr.new
|
18
20
|
end
|
19
|
-
rbind.parser.add_type OpenCVPtr.new
|
20
21
|
|
21
22
|
# add Vec types
|
22
23
|
2.upto(6) do |idx|
|
@@ -36,9 +37,15 @@ rbind.parse_headers
|
|
36
37
|
rbind.parse File.join(File.dirname(__FILE__),"post_opencv244.txt")
|
37
38
|
|
38
39
|
# post parsing + patching wrong signatures
|
39
|
-
if opencv_version >= "2.4.9"
|
40
|
+
if opencv_version >= "2.4.9" && opencv_version < "3.0.0"
|
41
|
+
rbind.parse File.join(File.dirname(__FILE__),"post_opencv249.txt")
|
42
|
+
rbind.cv.randShuffle.parameter(2).remove_const!
|
43
|
+
elsif opencv_version >= "3.0.0"
|
40
44
|
rbind.parse File.join(File.dirname(__FILE__),"post_opencv249.txt")
|
41
45
|
rbind.cv.randShuffle.parameter(2).remove_const!
|
46
|
+
rbind.cv.AlignExposures.process.parameter(1).remove_const!
|
47
|
+
rbind.cv.AlignMTB.process[0].parameter(1).remove_const!
|
48
|
+
rbind.cv.AlignMTB.process[1].parameter(1).remove_const!
|
42
49
|
end
|
43
50
|
|
44
51
|
rbind.cv.CascadeClassifier.detectMultiScale[1].parameter(2).remove_const!
|
@@ -82,6 +89,14 @@ if ARGV.include?("--doc")
|
|
82
89
|
end
|
83
90
|
end
|
84
91
|
|
92
|
+
# replace default parameter values which are template
|
93
|
+
# functions and not available on the ruby side
|
94
|
+
Rbind::GeneratorRuby.on_normalize_default_value do |parameter|
|
95
|
+
if parameter.default_value =~ /.*makePtr<(.*)>\(\)/
|
96
|
+
"cv::Ptr<#{$1}>(new #{$1})"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
85
100
|
# generate files
|
86
101
|
rbind.generator_ruby.file_prefix = "ropencv"
|
87
102
|
rbind.generate(File.join(File.dirname(__FILE__),"src"),File.join(File.dirname(__FILE__),"..","lib","ropencv"))
|
data/lib/ropencv/ropencv_ruby.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
module OpenCV
|
2
2
|
def self.included(obj)
|
3
|
-
obj.class_eval do
|
3
|
+
obj.class_eval do
|
4
4
|
def cv
|
5
5
|
Cv
|
6
6
|
end
|
7
|
+
def std
|
8
|
+
Std
|
9
|
+
end
|
7
10
|
end
|
8
11
|
end
|
9
12
|
|
@@ -68,6 +71,44 @@ module OpenCV
|
|
68
71
|
end
|
69
72
|
end
|
70
73
|
|
74
|
+
module Vec2x
|
75
|
+
def self.included base
|
76
|
+
base.instance_eval do
|
77
|
+
def to_native(obj,context)
|
78
|
+
if obj.is_a? ::OpenCV::Cv::Point
|
79
|
+
self.new(obj.x,obj.y).__obj_ptr__
|
80
|
+
elsif obj.is_a? ::OpenCV::Cv::Point2f
|
81
|
+
self.new(obj.x,obj.y).__obj_ptr__
|
82
|
+
elsif obj.is_a? ::OpenCV::Cv::Point2d
|
83
|
+
self.new(obj.x,obj.y).__obj_ptr__
|
84
|
+
elsif obj.is_a?(::OpenCV::Cv::Mat) && obj.rows == 2 && obj.cols == 1
|
85
|
+
self.new(obj[0],obj[1]).__obj_ptr__
|
86
|
+
else
|
87
|
+
rbind_to_native(obj,context)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
module Vec3x
|
95
|
+
def self.included base
|
96
|
+
base.instance_eval do
|
97
|
+
def to_native(obj,context)
|
98
|
+
if obj.is_a? ::OpenCV::Cv::Point3f
|
99
|
+
self.new(obj.x,obj.y,obj.z).__obj_ptr__
|
100
|
+
elsif obj.is_a? ::OpenCV::Cv::Point3d
|
101
|
+
self.new(obj.x,obj.y,obj.z).__obj_ptr__
|
102
|
+
elsif obj.is_a?(::OpenCV::Cv::Mat) && obj.rows == 3 && obj.cols == 1
|
103
|
+
self.new(obj[0],obj[1],obj[2]).__obj_ptr__
|
104
|
+
else
|
105
|
+
rbind_to_native(obj,context)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
71
112
|
module Vecxd
|
72
113
|
def [](i)
|
73
114
|
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
@@ -110,13 +151,13 @@ module OpenCV
|
|
110
151
|
end
|
111
152
|
end
|
112
153
|
|
113
|
-
class Vec2d;include Vecxd; SIZE=2;end
|
114
|
-
class Vec2f;include Vecxf; SIZE=2;end
|
115
|
-
class Vec2i;include Vecxi; SIZE=2;end
|
154
|
+
class Vec2d;include Vecxd;include Vec2x; SIZE=2;end
|
155
|
+
class Vec2f;include Vecxf;include Vec2x; SIZE=2;end
|
156
|
+
class Vec2i;include Vecxi;include Vec2x; SIZE=2;end
|
116
157
|
|
117
|
-
class Vec3d;include Vecxd; SIZE=3;end
|
118
|
-
class Vec3f;include Vecxf; SIZE=3;end
|
119
|
-
class Vec3i;include Vecxi; SIZE=3;end
|
158
|
+
class Vec3d;include Vecxd;include Vec3x; SIZE=3;end
|
159
|
+
class Vec3f;include Vecxf;include Vec3x; SIZE=3;end
|
160
|
+
class Vec3i;include Vecxi;include Vec3x; SIZE=3;end
|
120
161
|
|
121
162
|
class Vec4d;include Vecxd; SIZE=4;end
|
122
163
|
class Vec4f;include Vecxf; SIZE=4;end
|
@@ -160,7 +201,7 @@ module OpenCV
|
|
160
201
|
elsif e.is_a? Float
|
161
202
|
[:put_array_of_float64,8*w,CV_64FC1]
|
162
203
|
else
|
163
|
-
raise "cannot connvert
|
204
|
+
raise ArgumentError,"cannot connvert array of #{e.class} to cv::Mat"
|
164
205
|
end
|
165
206
|
mat = Mat.new(h,w,type)
|
166
207
|
ptr = mat.data
|
@@ -169,7 +210,7 @@ module OpenCV
|
|
169
210
|
setter.call(0,obj)
|
170
211
|
else
|
171
212
|
obj.each_with_index do |row,i|
|
172
|
-
raise "number of row elements must be equal for each row" if row.size != w
|
213
|
+
raise ArgumentError, "number of row elements must be equal for each row" if row.size != w
|
173
214
|
setter.call(i*step,row)
|
174
215
|
end
|
175
216
|
end
|
@@ -340,6 +381,48 @@ module OpenCV
|
|
340
381
|
pp.text str
|
341
382
|
end
|
342
383
|
|
384
|
+
def each_row_with_index(&block)
|
385
|
+
if block_given?
|
386
|
+
r = rows
|
387
|
+
0.upto(r-1) do |i|
|
388
|
+
yield(row(i),i)
|
389
|
+
end
|
390
|
+
else
|
391
|
+
to_enum(:each_row_with_index)
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
def each_col_with_index(&block)
|
396
|
+
if block_given?
|
397
|
+
c = cols
|
398
|
+
0.upto(c-1) do |i|
|
399
|
+
yield(col(i),i)
|
400
|
+
end
|
401
|
+
else
|
402
|
+
to_enum(:each_col_with_index)
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
def each_row(&block)
|
407
|
+
if block_given?
|
408
|
+
each_row_with_index do |r,i|
|
409
|
+
yield(r)
|
410
|
+
end
|
411
|
+
else
|
412
|
+
to_enum(:each_row)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
def each_col(&block)
|
417
|
+
if block_given?
|
418
|
+
each_col_with_index do |c,i|
|
419
|
+
yield(c)
|
420
|
+
end
|
421
|
+
else
|
422
|
+
to_enum(:each_col)
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
343
426
|
def to_a
|
344
427
|
h,w,c,s,ptr = [rows,cols,channels,step,data]
|
345
428
|
getter = case type & 7
|
data/ropencv.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'ropencv'
|
3
|
-
s.version = '0.0.
|
4
|
-
s.date = '2013-
|
3
|
+
s.version = '0.0.12'
|
4
|
+
s.date = '2013-10-29'
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.authors = ['Alexander Duda']
|
7
7
|
s.email = ['Alexander.Duda@dfki.de']
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.files = `git ls-files`.split("\n") + ["lib/ropencv/ropencv_types.rb","lib/ropencv/ropencv_ruby.rb"]
|
12
12
|
s.require_path = 'lib'
|
13
13
|
s.required_rubygems_version = ">= 1.3.6"
|
14
|
-
s.add_runtime_dependency "rbind", "
|
14
|
+
s.add_runtime_dependency "rbind", ">= 0.0.22"
|
15
15
|
s.add_runtime_dependency "ffi", "~> 1.9.0"
|
16
16
|
s.extensions = ['ext/extconf.rb']
|
17
17
|
s.license = 'BSD'
|
data/test/suite.rb
CHANGED
data/test/test_mat.rb
CHANGED
@@ -49,6 +49,79 @@ describe Cv::Mat do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
describe "each_row" do
|
53
|
+
it "iterators over each row" do
|
54
|
+
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
55
|
+
result = []
|
56
|
+
mat.each_row do |r|
|
57
|
+
result << r
|
58
|
+
end
|
59
|
+
assert_equal [1,2,3], result[0].to_a.flatten!
|
60
|
+
assert_equal [3,3,3], result[1].to_a.flatten!
|
61
|
+
assert_equal [5,6,7], result[2].to_a.flatten!
|
62
|
+
end
|
63
|
+
it "returns an enumerator if no block is given" do
|
64
|
+
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
65
|
+
result = mat.each_row.to_a
|
66
|
+
assert_equal [1,2,3], result[0].to_a.flatten!
|
67
|
+
assert_equal [3,3,3], result[1].to_a.flatten!
|
68
|
+
assert_equal [5,6,7], result[2].to_a.flatten!
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "each_row_with_index" do
|
73
|
+
it "iterators over each row" do
|
74
|
+
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
75
|
+
result = []
|
76
|
+
result_i = []
|
77
|
+
mat.each_row_with_index do |r,i|
|
78
|
+
result << r
|
79
|
+
result_i << i
|
80
|
+
end
|
81
|
+
assert_equal [1,2,3], result[0].to_a.flatten!
|
82
|
+
assert_equal [3,3,3], result[1].to_a.flatten!
|
83
|
+
assert_equal [5,6,7], result[2].to_a.flatten!
|
84
|
+
assert_equal [0,1,2], result_i
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "each_col" do
|
89
|
+
it "iterators over each col" do
|
90
|
+
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
91
|
+
result = []
|
92
|
+
mat.each_col do |r|
|
93
|
+
result << r
|
94
|
+
end
|
95
|
+
assert_equal [1,3,5], result[0].to_a.flatten!
|
96
|
+
assert_equal [2,3,6], result[1].to_a.flatten!
|
97
|
+
assert_equal [3,3,7], result[2].to_a.flatten!
|
98
|
+
end
|
99
|
+
it "returns an enumerator if no block is given" do
|
100
|
+
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
101
|
+
result = mat.each_col.to_a
|
102
|
+
assert_equal [1,3,5], result[0].to_a.flatten!
|
103
|
+
assert_equal [2,3,6], result[1].to_a.flatten!
|
104
|
+
assert_equal [3,3,7], result[2].to_a.flatten!
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "each_col_with_index" do
|
109
|
+
it "iterators over each col" do
|
110
|
+
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
111
|
+
result = []
|
112
|
+
result_i = []
|
113
|
+
mat.each_col_with_index do |c,i|
|
114
|
+
result << c
|
115
|
+
result_i << i
|
116
|
+
end
|
117
|
+
assert_equal [1,3,5], result[0].to_a.flatten!
|
118
|
+
assert_equal [2,3,6], result[1].to_a.flatten!
|
119
|
+
assert_equal [3,3,7], result[2].to_a.flatten!
|
120
|
+
assert_equal [0,1,2], result_i
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
|
52
125
|
describe "[]" do
|
53
126
|
it "can return a specific value" do
|
54
127
|
mat = cv::Mat.new([1,2,3],[3,3,3],[5,6,7])
|
data/test/test_opencv.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'minitest/spec'
|
2
|
+
require 'ropencv'
|
3
|
+
require 'pp'
|
4
|
+
include OpenCV
|
5
|
+
|
6
|
+
MiniTest::Unit.autorun
|
7
|
+
describe OpenCV::Cv do
|
8
|
+
before do
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "perspectiveTransfrom" do
|
15
|
+
it "can be called from ruby" do
|
16
|
+
t = cv::Mat::eye(3,3, cv::CV_64FC1)
|
17
|
+
points = std::Vector.new(cv::Point2f)
|
18
|
+
0.upto 10 do |i|
|
19
|
+
points << cv::Point2f.new(i,i)
|
20
|
+
end
|
21
|
+
mat = cv::Mat.new(points).reshape(2,points.size)
|
22
|
+
out = cv::Mat.new
|
23
|
+
cv::perspectiveTransform(mat,out,t)
|
24
|
+
assert_equal points.size, out.rows
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
metadata
CHANGED
@@ -1,56 +1,63 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ropencv
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.0.11
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.12
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Alexander Duda
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
16
14
|
name: rbind
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.22
|
20
|
+
type: :runtime
|
17
21
|
prerelease: false
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.22
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ffi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
21
31
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.9.0
|
24
34
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: ffi
|
28
35
|
prerelease: false
|
29
|
-
|
30
|
-
|
31
|
-
requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
32
38
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
39
|
+
- !ruby/object:Gem::Version
|
34
40
|
version: 1.9.0
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
email:
|
41
|
+
description: ROpenCV is a ffi ruby binding for the Open Source Computer Vision Library
|
42
|
+
OpenCV 2.4.4 and higher
|
43
|
+
email:
|
39
44
|
- Alexander.Duda@dfki.de
|
40
45
|
executables: []
|
41
|
-
|
42
|
-
extensions:
|
46
|
+
extensions:
|
43
47
|
- ext/extconf.rb
|
44
48
|
extra_rdoc_files: []
|
45
|
-
|
46
|
-
files:
|
49
|
+
files:
|
47
50
|
- .gitignore
|
48
51
|
- .yardopts
|
49
52
|
- CMakeLists.txt
|
50
53
|
- License.txt
|
51
54
|
- README.md
|
52
55
|
- examples/find_keypoints.rb
|
56
|
+
- examples/hough_circles.rb
|
53
57
|
- examples/logo.png
|
58
|
+
- examples/match_keypoints.rb
|
59
|
+
- examples/tsukuba_l.png
|
60
|
+
- examples/tsukuba_r.png
|
54
61
|
- ext/CMakeLists.txt
|
55
62
|
- ext/extconf.rb
|
56
63
|
- ext/helper.rb
|
@@ -71,38 +78,34 @@ files:
|
|
71
78
|
- ropencv.gemspec
|
72
79
|
- test/suite.rb
|
73
80
|
- test/test_mat.rb
|
81
|
+
- test/test_opencv.rb
|
74
82
|
- test/test_scalar.rb
|
75
83
|
- test/test_triangulate_points.rb
|
76
84
|
- test/test_vec.rb
|
77
85
|
- test/test_vector.rb
|
78
86
|
- lib/ropencv/ropencv_types.rb
|
79
87
|
homepage: http://www.ropencv.aduda.eu
|
80
|
-
licenses:
|
88
|
+
licenses:
|
81
89
|
- BSD
|
90
|
+
metadata: {}
|
82
91
|
post_install_message:
|
83
92
|
rdoc_options: []
|
84
|
-
|
85
|
-
require_paths:
|
93
|
+
require_paths:
|
86
94
|
- lib
|
87
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
- - ">="
|
97
|
-
- !ruby/object:Gem::Version
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '>='
|
103
|
+
- !ruby/object:Gem::Version
|
98
104
|
version: 1.3.6
|
99
105
|
requirements: []
|
100
|
-
|
101
106
|
rubyforge_project:
|
102
|
-
rubygems_version:
|
107
|
+
rubygems_version: 2.0.3
|
103
108
|
signing_key:
|
104
|
-
specification_version:
|
109
|
+
specification_version: 4
|
105
110
|
summary: Ruby bindings for opencv 2.4.4 and higher
|
106
111
|
test_files: []
|
107
|
-
|
108
|
-
has_rdoc:
|