ropencv 0.0.7 → 0.0.8
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.
- data/.gitignore +12 -4
- data/.yardopts +5 -2
- data/README.md +8 -16
- data/examples/find_keypoints.rb +1 -1
- data/ext/helper.rb +106 -0
- data/ext/opencv.txt +26 -131
- data/ext/opencv.yml +20100 -0
- data/ext/rbind.rb +48 -75
- data/ext/src/CMakeLists.txt +6 -7
- data/ext/src/cmake/FindGem.cmake +2 -2
- data/lib/{ruby/ropencv.rb → ropencv.rb} +0 -0
- data/lib/{ruby/ropencv → ropencv}/ropencv_ruby.rb +109 -57
- data/ropencv.gemspec +6 -7
- data/test/suite.rb +5 -0
- data/test/test_mat.rb +67 -0
- data/test/test_scalar.rb +34 -0
- data/test/test_triangulate_points.rb +34 -0
- data/test/test_vec.rb +150 -0
- data/test/test_vector.rb +68 -0
- metadata +16 -11
- data/examples/affine3d.rb +0 -17
- data/examples/scalar.rb +0 -10
- data/ext/specializing.rb +0 -50
data/ext/rbind.rb
CHANGED
@@ -1,106 +1,79 @@
|
|
1
1
|
require 'rbind'
|
2
2
|
require 'pp'
|
3
|
-
require
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
require File.join(File.dirname(__FILE__),'helper.rb')
|
6
|
+
opencv_version,opencv_headers = find_opencv
|
4
7
|
|
5
8
|
rbind = Rbind::Rbind.new("OpenCV")
|
6
9
|
rbind.pkg_config << "opencv"
|
10
|
+
rbind.includes = opencv_headers
|
7
11
|
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
raise "Cannot find OpenCV" if paths.empty?
|
14
|
-
|
15
|
-
#check opencv version
|
16
|
-
out = IO.popen("pkg-config --modversion opencv")
|
17
|
-
opencv_version = out.read.chomp
|
18
|
-
|
19
|
-
##add opencv headers
|
20
|
-
if opencv_version >= "2.4.4" && opencv_version <= "2.4.6"
|
21
|
-
rbind.includes = ["opencv2/core/core_c.h", "opencv2/core/types_c.h",
|
22
|
-
"opencv2/core/core.hpp", "opencv2/flann/miniflann.hpp",
|
23
|
-
"opencv2/imgproc/imgproc_c.h", "opencv2/imgproc/types_c.h",
|
24
|
-
"opencv2/imgproc/imgproc.hpp", "opencv2/photo/photo_c.h",
|
25
|
-
"opencv2/photo/photo.hpp", "opencv2/video/video.hpp",
|
26
|
-
"opencv2/features2d/features2d.hpp", "opencv2/objdetect/objdetect.hpp",
|
27
|
-
"opencv2/calib3d/calib3d.hpp", "opencv2/ml/ml.hpp",
|
28
|
-
"opencv2/highgui/highgui_c.h", "opencv2/highgui/highgui.hpp",
|
29
|
-
"opencv2/contrib/contrib.hpp", "opencv2/nonfree/nonfree.hpp",
|
30
|
-
"opencv2/nonfree/features2d.hpp"]
|
31
|
-
elsif opencv_version >= "2.4.9"
|
32
|
-
rbind.includes = ["opencv2/core.hpp", "opencv2/core/types.hpp",
|
33
|
-
"opencv2/core/utility.hpp", "opencv2/core/base.hpp",
|
34
|
-
"opencv2/contrib.hpp", "opencv2/calib3d.hpp",
|
35
|
-
"opencv2/features2d.hpp", "opencv2/flann.hpp",
|
36
|
-
"opencv2/highgui.hpp", "opencv2/imgproc.hpp",
|
37
|
-
"opencv2/ml.hpp", "opencv2/nonfree.hpp",
|
38
|
-
"opencv2/nonfree/features2d.hpp", "opencv2/objdetect.hpp",
|
39
|
-
"opencv2/photo.hpp", "opencv2/softcascade.hpp",
|
40
|
-
"opencv2/stitching.hpp", "opencv2/superres.hpp",
|
41
|
-
"opencv2/video.hpp", "opencv2/legacy.hpp",
|
42
|
-
"opencv2/videostab.hpp"]
|
12
|
+
# add some templates and alias
|
13
|
+
rbind.parser.type_alias["const_c_string"] = rbind.c_string.to_const
|
14
|
+
if opencv_version >= "2.4.9"
|
15
|
+
rbind.add_std_types
|
43
16
|
else
|
44
|
-
|
17
|
+
rbind.add_std_vector
|
45
18
|
end
|
19
|
+
rbind.parser.add_type OpenCVPtr.new
|
46
20
|
|
47
|
-
#
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
else
|
54
|
-
path
|
55
|
-
end
|
56
|
-
end.compact
|
57
|
-
Rbind.log.info "found opencv #{opencv_version}: #{paths[0]}"
|
58
|
-
|
59
|
-
# auto add vector and ptr types if missing
|
60
|
-
rbind.on_type_not_found do |owner,type|
|
61
|
-
if type =~ /Ptr_(.*)/
|
62
|
-
t = rbind.parser.find_type(owner,$1)
|
63
|
-
t2 = Rbind::RPtr.new(type,rbind,t).typedef("cv::Ptr<#{t.full_name} >")
|
64
|
-
rbind.parser.add_type t2
|
65
|
-
elsif type =~ /vector_(.*)/
|
66
|
-
t = rbind.parser.find_type(owner,$1)
|
67
|
-
t2 = Rbind::RVector.new(type,rbind,t).typedef("std::vector<#{t.full_name} >")
|
68
|
-
rbind.parser.add_type t2
|
69
|
-
end
|
21
|
+
# add Vec types
|
22
|
+
2.upto(6) do |idx|
|
23
|
+
next if idx == 5
|
24
|
+
rbind.parser.add_type Vec.new("cv::Vec#{idx}d",rbind.double,idx)
|
25
|
+
rbind.parser.add_type Vec.new("cv::Vec#{idx}f",rbind.float,idx)
|
26
|
+
rbind.parser.add_type Vec.new("cv::Vec#{idx}i",rbind.int,idx)
|
70
27
|
end
|
71
28
|
|
72
29
|
# parsing
|
73
30
|
rbind.parse File.join(File.dirname(__FILE__),"pre_opencv244.txt")
|
74
31
|
rbind.parse File.join(File.dirname(__FILE__),"opencv.txt")
|
75
32
|
rbind.use_namespace rbind.cv
|
76
|
-
rbind.
|
33
|
+
rbind.use_namespace rbind.std
|
34
|
+
rbind.cv.type_alias["string"] = rbind.cv.String
|
77
35
|
rbind.parse_headers
|
78
36
|
rbind.parse File.join(File.dirname(__FILE__),"post_opencv244.txt")
|
79
37
|
|
80
38
|
# post parsing + patching wrong signatures
|
81
39
|
if opencv_version >= "2.4.9"
|
82
40
|
rbind.parse File.join(File.dirname(__FILE__),"post_opencv249.txt")
|
83
|
-
rbind.cv.randShuffle.parameter(2).
|
41
|
+
rbind.cv.randShuffle.parameter(2).remove_const!
|
84
42
|
end
|
85
43
|
|
86
|
-
rbind.cv.CascadeClassifier.detectMultiScale[1].parameter(2).
|
87
|
-
rbind.cv.CascadeClassifier.detectMultiScale[1].parameter(3).
|
44
|
+
rbind.cv.CascadeClassifier.detectMultiScale[1].parameter(2).remove_const!
|
45
|
+
rbind.cv.CascadeClassifier.detectMultiScale[1].parameter(3).remove_const!
|
88
46
|
|
89
|
-
rbind.cv.BRISK.generateKernel.parameter(0).
|
90
|
-
rbind.cv.BRISK.generateKernel.parameter(1).
|
91
|
-
rbind.cv.BRISK.operation("BRISK")[1].parameter(0).
|
92
|
-
rbind.cv.BRISK.operation("BRISK")[1].parameter(1).
|
47
|
+
rbind.cv.BRISK.generateKernel.parameter(0).remove_const!
|
48
|
+
rbind.cv.BRISK.generateKernel.parameter(1).remove_const!
|
49
|
+
rbind.cv.BRISK.operation("BRISK")[1].parameter(0).remove_const!
|
50
|
+
rbind.cv.BRISK.operation("BRISK")[1].parameter(1).remove_const!
|
93
51
|
|
94
|
-
rbind.cv.putText.parameter(0).
|
95
|
-
rbind.cv.chamerMatching.parameter(0).
|
96
|
-
rbind.cv.chamerMatching.parameter(1).
|
97
|
-
rbind.cv.chamerMatching.parameter(2).
|
52
|
+
rbind.cv.putText.parameter(0).remove_const!
|
53
|
+
rbind.cv.chamerMatching.parameter(0).remove_const!
|
54
|
+
rbind.cv.chamerMatching.parameter(1).remove_const!
|
55
|
+
rbind.cv.chamerMatching.parameter(2).remove_const!
|
98
56
|
|
99
57
|
# add some more vector types
|
100
|
-
rbind.parser.
|
101
|
-
rbind.parser.
|
58
|
+
rbind.parser.type("std::vector<Point3f>")
|
59
|
+
rbind.parser.type("std::vector<Point3d>")
|
60
|
+
rbind.parser.type("std::vector<Vec4i>")
|
61
|
+
|
62
|
+
# add opencv docu
|
63
|
+
@doc = YAML.load(File.open(File.join(File.dirname(__FILE__),'opencv.yml')).read)
|
64
|
+
rbind.parser.each_type do |t|
|
65
|
+
if @doc.has_key?(t.full_name)
|
66
|
+
t.doc = @doc[t.full_name]
|
67
|
+
end
|
68
|
+
next unless t.is_a?(Rbind::RNamespace)
|
69
|
+
t.each_operation do |op|
|
70
|
+
if @doc.has_key?(op.full_name)
|
71
|
+
op.doc = @doc[op.full_name]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
102
75
|
|
103
76
|
# generate files
|
104
77
|
rbind.generator_ruby.file_prefix = "ropencv"
|
105
|
-
rbind.generate(File.join(File.dirname(__FILE__),"src"),File.join(File.dirname(__FILE__),"..","lib","
|
78
|
+
rbind.generate(File.join(File.dirname(__FILE__),"src"),File.join(File.dirname(__FILE__),"..","lib","ropencv"))
|
106
79
|
|
data/ext/src/CMakeLists.txt
CHANGED
@@ -22,15 +22,14 @@ ADD_LIBRARY(rbind_opencv SHARED ${RBIND_SRC})
|
|
22
22
|
TARGET_LINK_LIBRARIES(rbind_opencv ${OPENCV_LIBS} ${OPENCV_LDFLAGS} ${GEM_LIBRARIES})
|
23
23
|
|
24
24
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rbind.pc.in ${CMAKE_CURRENT_BINARY_DIR}/rbind_opencv.pc @ONLY)
|
25
|
-
set(ROOT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/../..)
|
26
25
|
|
27
|
-
|
26
|
+
set(ROOT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/../..)
|
28
27
|
if(GEM_INSTALL)
|
29
28
|
# local install
|
30
|
-
install(TARGETS rbind_opencv LIBRARY DESTINATION ${ROOT_FOLDER}/lib
|
31
|
-
install(FILES types.h operations.h conversions.hpp DESTINATION ${ROOT_FOLDER}/
|
32
|
-
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/extern.rbind DESTINATION ${ROOT_FOLDER}/
|
33
|
-
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/config.rbind DESTINATION ${ROOT_FOLDER}/
|
29
|
+
install(TARGETS rbind_opencv LIBRARY DESTINATION ${ROOT_FOLDER}/lib)
|
30
|
+
install(FILES types.h operations.h conversions.hpp DESTINATION ${ROOT_FOLDER}/include)
|
31
|
+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/extern.rbind DESTINATION ${ROOT_FOLDER}/include)
|
32
|
+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/config.rbind DESTINATION ${ROOT_FOLDER}/include)
|
34
33
|
else()
|
35
34
|
# global install
|
36
35
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rbind_opencv.pc DESTINATION lib/pkgconfig)
|
@@ -42,7 +41,7 @@ else()
|
|
42
41
|
FIND_PACKAGE(Ruby)
|
43
42
|
IF(NOT RUBY_INCLUDE_PATH)
|
44
43
|
MESSAGE(STATUS "Ruby library not found. Cannot install ruby extensions")
|
45
|
-
ELSEIF(
|
44
|
+
ELSEIF(RUBY_EXTENSIONS_AVAILABLE)
|
46
45
|
STRING(REGEX REPLACE ".*lib(32|64)?/?" "lib/" RUBY_LIBRARY_INSTALL_DIR ${RUBY_RUBY_LIB_PATH})
|
47
46
|
INSTALL(DIRECTORY ${ROOT_FOLDER}/lib/ruby/ DESTINATION ${RUBY_LIBRARY_INSTALL_DIR}
|
48
47
|
FILES_MATCHING PATTERN "*.rb")
|
data/ext/src/cmake/FindGem.cmake
CHANGED
@@ -111,10 +111,10 @@ foreach(Gem_NAME ${Gem_FIND_COMPONENTS})
|
|
111
111
|
endforeach()
|
112
112
|
|
113
113
|
# Compact the lists
|
114
|
-
if(
|
114
|
+
if(DEFINED GEM_LIBRARIES)
|
115
115
|
LIST(REMOVE_DUPLICATES GEM_LIBRARIES)
|
116
116
|
endif()
|
117
|
-
if(
|
117
|
+
if(DEFINED GEM_INCLUDE_DIRS)
|
118
118
|
LIST(REMOVE_DUPLICATES GEM_INCLUDE_DIRS)
|
119
119
|
endif()
|
120
120
|
endif()
|
File without changes
|
@@ -7,7 +7,39 @@ module OpenCV
|
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
+
class Std::Vector::Cv_Mat
|
11
|
+
def self.to_native(obj,context)
|
12
|
+
if obj.is_a?(Vector::Std_Vector_Cv_Point2f)
|
13
|
+
t = Vector::Cv_Mat.new
|
14
|
+
obj.each do |e|
|
15
|
+
t << cv::Mat.new(e.size,2,cv::CV_32FC1,e.data,cv::Mat::AUTO_STEP)
|
16
|
+
end
|
17
|
+
t.__obj_ptr__
|
18
|
+
elsif obj.is_a?(Vector::Std_Vector_Cv_Point)
|
19
|
+
t = Vector::Cv_Mat.new
|
20
|
+
obj.each do |e|
|
21
|
+
t << cv::Mat.new(e.size,2,cv::CV_32SC1,e.data,cv::Mat::AUTO_STEP)
|
22
|
+
end
|
23
|
+
t.__obj_ptr__
|
24
|
+
else
|
25
|
+
rbind_to_native(obj,context)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
include Std
|
30
|
+
|
10
31
|
module Cv
|
32
|
+
class Size
|
33
|
+
def *(val)
|
34
|
+
Size.new(width*val,height*val)
|
35
|
+
end
|
36
|
+
def +(val)
|
37
|
+
Size.new(width+val,height+val)
|
38
|
+
end
|
39
|
+
def -(val)
|
40
|
+
Size.new(width-val,height-val)
|
41
|
+
end
|
42
|
+
end
|
11
43
|
class String
|
12
44
|
def self.to_native(obj,context)
|
13
45
|
if obj.is_a? ::String
|
@@ -22,69 +54,76 @@ module OpenCV
|
|
22
54
|
end
|
23
55
|
end
|
24
56
|
|
25
|
-
class
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
class Vec2d
|
34
|
-
def [](i)
|
35
|
-
raise "Out of bound #{i}" if i < 0 || i > 1
|
36
|
-
val.get_float64(i*8)
|
37
|
-
end
|
38
|
-
def []=(i,val0)
|
39
|
-
raise "Out of bound #{i}" if i < 0 || i > 1
|
40
|
-
val.put_float64(i*8,val0)
|
57
|
+
class Point
|
58
|
+
def self.to_native(obj,context)
|
59
|
+
if obj.is_a? ::OpenCV::Cv::Point2f
|
60
|
+
OpenCV::Cv::Point.new(obj.x,obj.y).__obj_ptr__
|
61
|
+
else
|
62
|
+
rbind_to_native(obj,context)
|
63
|
+
end
|
41
64
|
end
|
42
65
|
end
|
43
66
|
|
44
|
-
|
67
|
+
module Vecxd
|
45
68
|
def [](i)
|
46
|
-
raise "Out of bound #{i}" if i < 0 || i
|
69
|
+
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
47
70
|
val.get_float64(i*8)
|
48
71
|
end
|
49
72
|
def []=(i,val0)
|
50
|
-
raise "Out of bound #{i}" if i < 0 || i
|
73
|
+
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
51
74
|
val.put_float64(i*8,val0)
|
52
75
|
end
|
53
|
-
|
54
|
-
|
55
|
-
class Vec4d
|
56
|
-
def [](i)
|
57
|
-
raise "Out of bound #{i}" if i < 0 || i > 3
|
58
|
-
val.get_float64(i*8)
|
59
|
-
end
|
60
|
-
def []=(i,val0)
|
61
|
-
raise "Out of bound #{i}" if i < 0 || i > 3
|
62
|
-
val.put_float64(i*8,val0)
|
76
|
+
def to_a
|
77
|
+
val.get_array_of_float64(0,self.class::SIZE)
|
63
78
|
end
|
64
79
|
end
|
65
80
|
|
66
|
-
|
81
|
+
module Vecxf
|
67
82
|
def [](i)
|
68
|
-
raise "Out of bound #{i}" if i < 0 || i
|
83
|
+
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
69
84
|
val.get_float32(i*4)
|
70
85
|
end
|
71
86
|
def []=(i,val0)
|
72
|
-
raise "Out of bound #{i}" if i < 0 || i
|
87
|
+
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
73
88
|
val.put_float32(i*4,val0)
|
74
89
|
end
|
90
|
+
def to_a
|
91
|
+
val.get_array_of_float32(0,self.class::SIZE)
|
92
|
+
end
|
75
93
|
end
|
76
|
-
|
77
|
-
|
94
|
+
|
95
|
+
module Vecxi
|
78
96
|
def [](i)
|
79
|
-
raise "Out of bound #{i}" if i < 0 || i
|
80
|
-
val.
|
97
|
+
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
98
|
+
val.get_int(i*FFI.type_size(FFI::Type::INT))
|
81
99
|
end
|
82
100
|
def []=(i,val0)
|
83
|
-
raise "Out of bound #{i}" if i < 0 || i
|
84
|
-
val.
|
101
|
+
raise "Out of bound #{i}" if i < 0 || i >= self.class::SIZE
|
102
|
+
val.put_int(i*FFI.type_size(FFI::Type::INT),val0)
|
103
|
+
end
|
104
|
+
def to_a
|
105
|
+
val.get_array_of_int(0,self.class::SIZE)
|
85
106
|
end
|
86
107
|
end
|
87
108
|
|
109
|
+
class Vec2d;include Vecxd; SIZE=2;end
|
110
|
+
class Vec2f;include Vecxf; SIZE=2;end
|
111
|
+
class Vec2i;include Vecxi; SIZE=2;end
|
112
|
+
|
113
|
+
class Vec3d;include Vecxd; SIZE=3;end
|
114
|
+
class Vec3f;include Vecxf; SIZE=3;end
|
115
|
+
class Vec3i;include Vecxi; SIZE=3;end
|
116
|
+
|
117
|
+
class Vec4d;include Vecxd; SIZE=4;end
|
118
|
+
class Vec4f;include Vecxf; SIZE=4;end
|
119
|
+
class Vec4i;include Vecxi; SIZE=4;end
|
120
|
+
|
121
|
+
class Vec6d;include Vecxd; SIZE=6;end
|
122
|
+
class Vec6f;include Vecxf; SIZE=6;end
|
123
|
+
class Vec6i;include Vecxi; SIZE=6;end
|
124
|
+
|
125
|
+
class Scalar; include Vecxd; SIZE=4;end
|
126
|
+
|
88
127
|
class Mat
|
89
128
|
class << self
|
90
129
|
alias :rbind_new :new
|
@@ -100,9 +139,11 @@ module OpenCV
|
|
100
139
|
end
|
101
140
|
|
102
141
|
def self.to_native(obj,context)
|
103
|
-
if obj.is_a?(
|
142
|
+
if obj.is_a?(Std::Vector::Cv_Point)
|
143
|
+
cv::Mat.new(obj.size,2,cv::CV_32SC1,obj.data,cv::Mat::AUTO_STEP).__obj_ptr__
|
144
|
+
elsif obj.is_a?(Std::Vector::Cv_Point2f)
|
104
145
|
cv::Mat.new(obj.size,2,cv::CV_32FC1,obj.data,cv::Mat::AUTO_STEP).__obj_ptr__
|
105
|
-
elsif obj.is_a?(
|
146
|
+
elsif obj.is_a?(Std::Vector::Cv_Point3f)
|
106
147
|
cv::Mat.new(obj.size,3,cv::CV_32FC1,obj.data,cv::Mat::AUTO_STEP).__obj_ptr__
|
107
148
|
elsif obj.is_a?(Array)
|
108
149
|
h,w,e= if obj.first.is_a? Array
|
@@ -151,17 +192,25 @@ module OpenCV
|
|
151
192
|
[i,j]
|
152
193
|
end
|
153
194
|
if i >= rows || i < 0 || j >= cols || j <0
|
154
|
-
raise ArgumentError,"out of bound #{i}/#{j}"
|
195
|
+
raise ArgumentError,"out of bound #{i}/#{j} #{rows}/#{cols}"
|
155
196
|
end
|
156
197
|
case type & 7
|
157
198
|
when CV_8U
|
158
199
|
data.get_uint8(i*step+j)
|
200
|
+
when CV_16U
|
201
|
+
data.get_uint16(i*step+j*2)
|
202
|
+
when CV_16S
|
203
|
+
data.get_int16(i*step+j*2)
|
204
|
+
when CV_32S
|
205
|
+
data.get_int32(i*step+j*4)
|
206
|
+
when CV_32F
|
207
|
+
data.get_float32(i*step+j*4)
|
159
208
|
when CV_32F
|
160
209
|
data.get_float32(i*step+j*4)
|
161
210
|
when CV_64F
|
162
211
|
data.get_float64(i*step+j*8)
|
163
212
|
else
|
164
|
-
raise "cannot connvert #{self.class} to ruby"
|
213
|
+
raise "cannot connvert #{self.class} of type #{type} to ruby"
|
165
214
|
end
|
166
215
|
end
|
167
216
|
|
@@ -210,12 +259,18 @@ module OpenCV
|
|
210
259
|
case type & 7
|
211
260
|
when CV_8U
|
212
261
|
data.put_uint8(i*step+j,val)
|
262
|
+
when CV_16U
|
263
|
+
data.put_uint16(i*step+j,val*2)
|
264
|
+
when CV_16S
|
265
|
+
data.put_int16(i*step+j,val*2)
|
266
|
+
when CV_32S
|
267
|
+
data.put_int32(i*step+j,val*4)
|
213
268
|
when CV_32F
|
214
269
|
data.put_float32(i*step+j*4,val)
|
215
270
|
when CV_64F
|
216
271
|
data.put_float64(i*step+j*8,val)
|
217
272
|
else
|
218
|
-
raise "cannot connvert #{self.class} to ruby"
|
273
|
+
raise "cannot connvert #{self.class} of type #{type} to ruby"
|
219
274
|
end
|
220
275
|
end
|
221
276
|
|
@@ -274,12 +329,7 @@ module OpenCV
|
|
274
329
|
else
|
275
330
|
'%6.3f'
|
276
331
|
end
|
277
|
-
|
278
|
-
[to_a]
|
279
|
-
else
|
280
|
-
to_a
|
281
|
-
end
|
282
|
-
str = a.map do |r|
|
332
|
+
str = to_a.map do |r|
|
283
333
|
str = r.map do |e|
|
284
334
|
sprintf(format,e)
|
285
335
|
end.join(" ")
|
@@ -293,6 +343,12 @@ module OpenCV
|
|
293
343
|
getter = case type & 7
|
294
344
|
when CV_8U
|
295
345
|
ptr.method(:get_array_of_uint8)
|
346
|
+
when CV_16U
|
347
|
+
ptr.method(:get_array_of_uint16)
|
348
|
+
when CV_16S
|
349
|
+
ptr.method(:get_array_of_int16)
|
350
|
+
when CV_32S
|
351
|
+
ptr.method(:get_array_of_int32)
|
296
352
|
when CV_32F
|
297
353
|
ptr.method(:get_array_of_float32)
|
298
354
|
when CV_64F
|
@@ -300,15 +356,11 @@ module OpenCV
|
|
300
356
|
else
|
301
357
|
raise "cannot connvert #{self.class} to array"
|
302
358
|
end
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
result = []
|
307
|
-
0.upto(h-1) do |i|
|
308
|
-
result << getter.call(s*i,w*c)
|
309
|
-
end
|
310
|
-
result
|
359
|
+
result = []
|
360
|
+
0.upto(h-1) do |i|
|
361
|
+
result << getter.call(s*i,w*c)
|
311
362
|
end
|
363
|
+
result
|
312
364
|
end
|
313
365
|
end
|
314
366
|
end
|