ruby-opencv 0.0.11 → 0.0.12.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.yardopts +3 -0
- data/Gemfile +1 -0
- data/Manifest.txt +2 -14
- data/README.md +1 -1
- data/Rakefile +10 -1
- data/examples/facerec/facerec_lbph.rb +1 -1
- data/ext/opencv/algorithm.cpp +6 -1
- data/ext/opencv/algorithm.h +1 -1
- data/ext/opencv/curve.cpp +48 -33
- data/ext/opencv/curve.h +1 -1
- data/ext/opencv/cvavgcomp.cpp +22 -25
- data/ext/opencv/cvavgcomp.h +1 -1
- data/ext/opencv/cvbox2d.cpp +56 -58
- data/ext/opencv/cvbox2d.h +1 -1
- data/ext/opencv/cvcapture.cpp +210 -109
- data/ext/opencv/cvcapture.h +1 -1
- data/ext/opencv/cvchain.cpp +71 -71
- data/ext/opencv/cvchain.h +1 -1
- data/ext/opencv/cvcircle32f.cpp +37 -27
- data/ext/opencv/cvcircle32f.h +1 -1
- data/ext/opencv/cvconnectedcomp.cpp +49 -36
- data/ext/opencv/cvconnectedcomp.h +1 -1
- data/ext/opencv/cvcontour.cpp +117 -81
- data/ext/opencv/cvcontour.h +1 -1
- data/ext/opencv/cvcontourtree.cpp +37 -32
- data/ext/opencv/cvcontourtree.h +1 -1
- data/ext/opencv/cvconvexitydefect.cpp +33 -44
- data/ext/opencv/cvconvexitydefect.h +1 -1
- data/ext/opencv/cverror.cpp +22 -66
- data/ext/opencv/cverror.h +1 -1
- data/ext/opencv/cvfeaturetree.cpp +31 -33
- data/ext/opencv/cvfeaturetree.h +1 -1
- data/ext/opencv/cvfont.cpp +98 -78
- data/ext/opencv/cvfont.h +1 -1
- data/ext/opencv/cvhaarclassifiercascade.cpp +39 -59
- data/ext/opencv/cvhaarclassifiercascade.h +1 -1
- data/ext/opencv/cvhistogram.cpp +259 -90
- data/ext/opencv/cvhistogram.h +1 -1
- data/ext/opencv/cvhumoments.cpp +99 -60
- data/ext/opencv/cvhumoments.h +1 -1
- data/ext/opencv/cvline.cpp +45 -40
- data/ext/opencv/cvline.h +1 -1
- data/ext/opencv/cvmat.cpp +1894 -1829
- data/ext/opencv/cvmat.h +2 -3
- data/ext/opencv/cvmemstorage.cpp +19 -14
- data/ext/opencv/cvmemstorage.h +1 -1
- data/ext/opencv/cvmoments.cpp +51 -45
- data/ext/opencv/cvmoments.h +1 -1
- data/ext/opencv/cvpoint.cpp +32 -26
- data/ext/opencv/cvpoint.h +1 -1
- data/ext/opencv/cvpoint2d32f.cpp +31 -26
- data/ext/opencv/cvpoint2d32f.h +1 -1
- data/ext/opencv/cvpoint3d32f.cpp +36 -29
- data/ext/opencv/cvpoint3d32f.h +1 -1
- data/ext/opencv/cvrect.cpp +38 -33
- data/ext/opencv/cvrect.h +1 -1
- data/ext/opencv/cvscalar.cpp +50 -45
- data/ext/opencv/cvscalar.h +1 -1
- data/ext/opencv/cvseq.cpp +53 -47
- data/ext/opencv/cvseq.h +1 -1
- data/ext/opencv/cvsize.cpp +32 -26
- data/ext/opencv/cvsize.h +1 -1
- data/ext/opencv/cvsize2d32f.cpp +31 -25
- data/ext/opencv/cvsize2d32f.h +1 -1
- data/ext/opencv/cvslice.cpp +28 -22
- data/ext/opencv/cvslice.h +1 -1
- data/ext/opencv/cvsurfparams.cpp +37 -28
- data/ext/opencv/cvsurfparams.h +1 -1
- data/ext/opencv/cvsurfpoint.cpp +76 -53
- data/ext/opencv/cvsurfpoint.h +1 -1
- data/ext/opencv/cvtermcriteria.cpp +32 -26
- data/ext/opencv/cvtermcriteria.h +1 -1
- data/ext/opencv/cvtwopoints.cpp +28 -22
- data/ext/opencv/cvtwopoints.h +1 -1
- data/ext/opencv/cvvideowriter.cpp +25 -20
- data/ext/opencv/cvvideowriter.h +1 -1
- data/ext/opencv/eigenfaces.cpp +10 -2
- data/ext/opencv/eigenfaces.h +1 -1
- data/ext/opencv/facerecognizer.cpp +15 -8
- data/ext/opencv/facerecognizer.h +2 -2
- data/ext/opencv/fisherfaces.cpp +10 -2
- data/ext/opencv/fisherfaces.h +1 -1
- data/ext/opencv/gui.cpp +26 -23
- data/ext/opencv/gui.h +1 -1
- data/ext/opencv/iplconvkernel.cpp +30 -24
- data/ext/opencv/iplconvkernel.h +1 -1
- data/ext/opencv/iplimage.cpp +49 -42
- data/ext/opencv/iplimage.h +1 -1
- data/ext/opencv/lbph.cpp +10 -2
- data/ext/opencv/lbph.h +1 -1
- data/ext/opencv/mouseevent.cpp +30 -25
- data/ext/opencv/mouseevent.h +1 -1
- data/ext/opencv/opencv.cpp +59 -60
- data/ext/opencv/opencv.h +1 -5
- data/ext/opencv/pointset.cpp +31 -25
- data/ext/opencv/pointset.h +1 -1
- data/ext/opencv/trackbar.cpp +27 -21
- data/ext/opencv/trackbar.h +1 -1
- data/ext/opencv/window.cpp +77 -57
- data/ext/opencv/window.h +1 -1
- data/lib/opencv/version.rb +2 -1
- data/ruby-opencv.gemspec +19 -18
- data/test/test_opencv.rb +5 -3
- data/yard_extension.rb +5 -0
- metadata +13 -27
- data/examples/matching_to_many_images/matching_to_many_images.rb +0 -16
- data/examples/matching_to_many_images/query.png +0 -0
- data/examples/matching_to_many_images/train/1.png +0 -0
- data/examples/matching_to_many_images/train/2.png +0 -0
- data/examples/matching_to_many_images/train/3.png +0 -0
- data/examples/matching_to_many_images/train/trainImages.txt +0 -3
- data/ext/opencv/cvcondensation.cpp +0 -282
- data/ext/opencv/cvcondensation.h +0 -49
- data/ext/opencv/cvmatnd.cpp +0 -44
- data/ext/opencv/cvmatnd.h +0 -28
- data/ext/opencv/cvsparsemat.cpp +0 -44
- data/ext/opencv/cvsparsemat.h +0 -28
- data/images/face_detect_from_lena.jpg +0 -0
- data/test/test_cvmat_matching.rb +0 -57
data/ext/opencv/cvfont.h
CHANGED
@@ -11,11 +11,7 @@
|
|
11
11
|
/*
|
12
12
|
* Document-class: OpenCV::CvHaarClassifierCascade
|
13
13
|
*
|
14
|
-
*
|
15
|
-
* This detector can discover object (e.g. human's face) from image.
|
16
|
-
*
|
17
|
-
* Find face-area from picture "lena"...
|
18
|
-
* link:../images/face_detect_from_lena.jpg
|
14
|
+
* Haar Feature-based Cascade Classifier for Object Detection
|
19
15
|
*/
|
20
16
|
__NAMESPACE_BEGIN_OPENCV
|
21
17
|
__NAMESPACE_BEGIN_CVHAARCLASSIFERCASCADE
|
@@ -28,23 +24,6 @@ rb_class()
|
|
28
24
|
return rb_klass;
|
29
25
|
}
|
30
26
|
|
31
|
-
void define_ruby_class()
|
32
|
-
{
|
33
|
-
if (rb_klass)
|
34
|
-
return;
|
35
|
-
/*
|
36
|
-
* opencv = rb_define_module("OpenCV");
|
37
|
-
*
|
38
|
-
* note: this comment is used by rdoc.
|
39
|
-
*/
|
40
|
-
VALUE opencv = rb_module_opencv();
|
41
|
-
|
42
|
-
rb_klass = rb_define_class_under(opencv, "CvHaarClassifierCascade", rb_cObject);
|
43
|
-
rb_define_alloc_func(rb_klass, rb_allocate);
|
44
|
-
rb_define_singleton_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load), 1);
|
45
|
-
rb_define_method(rb_klass, "detect_objects", RUBY_METHOD_FUNC(rb_detect_objects), -1);
|
46
|
-
}
|
47
|
-
|
48
27
|
VALUE
|
49
28
|
rb_allocate(VALUE klass)
|
50
29
|
{
|
@@ -61,18 +40,13 @@ cvhaarclassifiercascade_free(void* ptr)
|
|
61
40
|
}
|
62
41
|
|
63
42
|
/*
|
64
|
-
* call-seq:
|
65
|
-
* CvHaarClassiferCascade.load(<i>path</i>) -> object-detector
|
66
|
-
*
|
67
43
|
* Load trained cascade of haar classifers from file.
|
68
|
-
* Object detection classifiers are stored in XML or YAML files.
|
69
|
-
* sample of object detection classifier files is included by OpenCV.
|
70
|
-
*
|
71
|
-
* You can found these at
|
72
|
-
* C:\Program Files\OpenCV\data\haarcascades\*.xml (Windows, default install path)
|
73
44
|
*
|
74
|
-
*
|
75
|
-
*
|
45
|
+
* @overload load(filename)
|
46
|
+
* @param filename [String] Haar classifer file name
|
47
|
+
* @return [CvHaarClassifierCascade] Object detector
|
48
|
+
* @scope class
|
49
|
+
* @opencv_func cvLoad
|
76
50
|
*/
|
77
51
|
VALUE
|
78
52
|
rb_load(VALUE klass, VALUE path)
|
@@ -90,35 +64,23 @@ rb_load(VALUE klass, VALUE path)
|
|
90
64
|
}
|
91
65
|
|
92
66
|
/*
|
93
|
-
*
|
94
|
-
* detect_objects(image[, options]) -> cvseq(include CvAvgComp object)
|
95
|
-
* detect_objects(image[, options]){|cmp| ... } -> cvseq(include CvAvgComp object)
|
96
|
-
*
|
97
|
-
* Detects objects in the image. This method finds rectangular regions in the
|
98
|
-
* given image that are likely to contain objects the cascade has been trained
|
99
|
-
* for and return those regions as a sequence of rectangles.
|
67
|
+
* Detects objects of different sizes in the input image.
|
100
68
|
*
|
101
|
-
*
|
102
|
-
*
|
103
|
-
*
|
104
|
-
*
|
105
|
-
*
|
69
|
+
* @overload detect_objects(image, options = nil)
|
70
|
+
* @param image [CvMat,IplImage] Matrix of the type CV_8U containing an image where objects are detected.
|
71
|
+
* @param options [Hash] Options
|
72
|
+
* @option options [Number] :scale_factor
|
73
|
+
* Parameter specifying how much the image size is reduced at each image scale.
|
74
|
+
* @option options [Number] :storage
|
106
75
|
* Memory storage to store the resultant sequence of the object candidate rectangles
|
107
|
-
* :
|
108
|
-
*
|
109
|
-
*
|
110
|
-
*
|
111
|
-
*
|
112
|
-
*
|
113
|
-
*
|
114
|
-
*
|
115
|
-
* If min_neighbors is 0, the function does not any grouping at all and returns all the detected
|
116
|
-
* candidate rectangles, whitch many be useful if the user wants to apply a customized grouping procedure.
|
117
|
-
* :min_size
|
118
|
-
* Minimum window size. By default, it is set to size of samples the classifier has been
|
119
|
-
* trained on (~20x20 for face detection).
|
120
|
-
* :max_size
|
121
|
-
* aximum window size to use. By default, it is set to the size of the image.
|
76
|
+
* @option options [Number] :min_neighbors
|
77
|
+
* Parameter specifying how many neighbors each candidate rectangle should have to retain it.
|
78
|
+
* @option options [CvSize] :min_size
|
79
|
+
* Minimum possible object size. Objects smaller than that are ignored.
|
80
|
+
* @option options [CvSize] :max_size
|
81
|
+
* Maximum possible object size. Objects larger than that are ignored.
|
82
|
+
* @return [CvSeq<CvAvgComp>] Detected objects as a list of rectangles
|
83
|
+
* @opencv_func cvHaarDetectObjects
|
122
84
|
*/
|
123
85
|
VALUE
|
124
86
|
rb_detect_objects(int argc, VALUE *argv, VALUE self)
|
@@ -164,5 +126,23 @@ rb_detect_objects(int argc, VALUE *argv, VALUE self)
|
|
164
126
|
return result;
|
165
127
|
}
|
166
128
|
|
129
|
+
void
|
130
|
+
init_ruby_class()
|
131
|
+
{
|
132
|
+
#if 0
|
133
|
+
// For documentation using YARD
|
134
|
+
VALUE opencv = rb_define_module("OpenCV");
|
135
|
+
#endif
|
136
|
+
|
137
|
+
if (rb_klass)
|
138
|
+
return;
|
139
|
+
|
140
|
+
VALUE opencv = rb_module_opencv();
|
141
|
+
rb_klass = rb_define_class_under(opencv, "CvHaarClassifierCascade", rb_cObject);
|
142
|
+
rb_define_alloc_func(rb_klass, rb_allocate);
|
143
|
+
rb_define_singleton_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load), 1);
|
144
|
+
rb_define_method(rb_klass, "detect_objects", RUBY_METHOD_FUNC(rb_detect_objects), -1);
|
145
|
+
}
|
146
|
+
|
167
147
|
__NAMESPACE_END_CVHAARCLASSIFERCASCADE
|
168
148
|
__NAMESPACE_END_OPENCV
|
data/ext/opencv/cvhistogram.cpp
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
/*
|
12
12
|
* Document-class: OpenCV::CvHistogram
|
13
13
|
*
|
14
|
-
*
|
14
|
+
* Multi-dimensional histogram.
|
15
15
|
*/
|
16
16
|
__NAMESPACE_BEGIN_OPENCV
|
17
17
|
__NAMESPACE_BEGIN_CVHISTOGRAM
|
@@ -24,57 +24,6 @@ rb_class()
|
|
24
24
|
return rb_klass;
|
25
25
|
}
|
26
26
|
|
27
|
-
void
|
28
|
-
define_ruby_class()
|
29
|
-
{
|
30
|
-
if (rb_klass)
|
31
|
-
return;
|
32
|
-
/*
|
33
|
-
* opencv = rb_define_module("OpenCV");
|
34
|
-
*
|
35
|
-
* note: this comment is used by rdoc.
|
36
|
-
*/
|
37
|
-
VALUE opencv = rb_module_opencv();
|
38
|
-
rb_klass = rb_define_class_under(opencv, "CvHistogram", rb_cObject);
|
39
|
-
|
40
|
-
rb_define_alloc_func(rb_klass, rb_allocate);
|
41
|
-
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
42
|
-
rb_define_method(rb_klass, "is_uniform?", RUBY_METHOD_FUNC(rb_is_uniform), 0);
|
43
|
-
rb_define_method(rb_klass, "is_sparse?", RUBY_METHOD_FUNC(rb_is_sparse), 0);
|
44
|
-
rb_define_method(rb_klass, "has_range?", RUBY_METHOD_FUNC(rb_has_range), 0);
|
45
|
-
rb_define_method(rb_klass, "dims", RUBY_METHOD_FUNC(rb_dims), 0);
|
46
|
-
rb_define_method(rb_klass, "calc_hist", RUBY_METHOD_FUNC(rb_calc_hist), -1);
|
47
|
-
rb_define_method(rb_klass, "calc_hist!", RUBY_METHOD_FUNC(rb_calc_hist_bang), -1);
|
48
|
-
rb_define_method(rb_klass, "[]", RUBY_METHOD_FUNC(rb_aref), -2);
|
49
|
-
rb_define_alias(rb_klass, "query_hist_value", "[]");
|
50
|
-
rb_define_method(rb_klass, "min_max_value", RUBY_METHOD_FUNC(rb_min_max_value), 0);
|
51
|
-
rb_define_method(rb_klass, "copy_hist", RUBY_METHOD_FUNC(rb_copy_hist), 0);
|
52
|
-
|
53
|
-
rb_define_method(rb_klass, "clear_hist", RUBY_METHOD_FUNC(rb_clear_hist), 0);
|
54
|
-
rb_define_alias(rb_klass, "clear", "clear_hist");
|
55
|
-
rb_define_method(rb_klass, "clear_hist!", RUBY_METHOD_FUNC(rb_clear_hist_bang), 0);
|
56
|
-
rb_define_alias(rb_klass, "clear!", "clear_hist!");
|
57
|
-
|
58
|
-
rb_define_method(rb_klass, "normalize_hist", RUBY_METHOD_FUNC(rb_normalize_hist), 1);
|
59
|
-
rb_define_alias(rb_klass, "normalize", "normalize_hist");
|
60
|
-
rb_define_method(rb_klass, "normalize_hist!", RUBY_METHOD_FUNC(rb_normalize_hist_bang), 1);
|
61
|
-
rb_define_alias(rb_klass, "normalize!", "normalize_hist!");
|
62
|
-
|
63
|
-
rb_define_method(rb_klass, "thresh_hist", RUBY_METHOD_FUNC(rb_thresh_hist), 1);
|
64
|
-
rb_define_alias(rb_klass, "thresh", "thresh_hist");
|
65
|
-
rb_define_method(rb_klass, "thresh_hist!", RUBY_METHOD_FUNC(rb_thresh_hist_bang), 1);
|
66
|
-
rb_define_alias(rb_klass, "thresh!", "thresh_hist!");
|
67
|
-
|
68
|
-
rb_define_method(rb_klass, "set_hist_bin_ranges", RUBY_METHOD_FUNC(rb_set_hist_bin_ranges), -1);
|
69
|
-
rb_define_method(rb_klass, "set_hist_bin_ranges!", RUBY_METHOD_FUNC(rb_set_hist_bin_ranges_bang), -1);
|
70
|
-
|
71
|
-
rb_define_method(rb_klass, "calc_back_project", RUBY_METHOD_FUNC(rb_calc_back_project), 1);
|
72
|
-
rb_define_method(rb_klass, "calc_back_project_patch", RUBY_METHOD_FUNC(rb_calc_back_project_patch), 4);
|
73
|
-
|
74
|
-
rb_define_singleton_method(rb_klass, "calc_prob_density", RUBY_METHOD_FUNC(rb_calc_prob_density), -1);
|
75
|
-
rb_define_singleton_method(rb_klass, "compare_hist", RUBY_METHOD_FUNC(rb_compare_hist), 3);
|
76
|
-
}
|
77
|
-
|
78
27
|
void
|
79
28
|
release_hist(void* ptr)
|
80
29
|
{
|
@@ -119,6 +68,23 @@ ary2intptr(VALUE ary, int* buff)
|
|
119
68
|
return buff;
|
120
69
|
}
|
121
70
|
|
71
|
+
/*
|
72
|
+
* Creates a histogram
|
73
|
+
* @overload new(dims, sizes, type, ranges=nil, uniform=true)
|
74
|
+
* @param dims [Integer] Number of histogram dimensions
|
75
|
+
* @param sizes [Array<Integer>] Array of the histogram dimension sizes
|
76
|
+
* @param type [Integer]
|
77
|
+
* Histogram representation format. CV_HIST_ARRAY means that the histogram data is represented
|
78
|
+
* as a multi-dimensional dense array CvMatND. CV_HIST_SPARSE means that histogram data is
|
79
|
+
* represented as a multi-dimensional sparse array CvSparseMat.
|
80
|
+
* @param ranges [Array<Integer>]
|
81
|
+
* Array of ranges for the histogram bins. Its meaning depends on the uniform parameter value.
|
82
|
+
* The ranges are used when the histogram is calculated or backprojected to determine which
|
83
|
+
* histogram bin corresponds to which value/tuple of values from the input image(s).
|
84
|
+
* @param uniform [Boolean] Uniformity flag.
|
85
|
+
* @return [CvHistogram] Histogram
|
86
|
+
* @opencv_func cvCreateHist
|
87
|
+
*/
|
122
88
|
VALUE
|
123
89
|
rb_initialize(int argc, VALUE *argv, VALUE self)
|
124
90
|
{
|
@@ -157,9 +123,10 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
|
157
123
|
}
|
158
124
|
|
159
125
|
/*
|
160
|
-
*
|
161
|
-
*
|
162
|
-
*
|
126
|
+
* Returns <tt>self</tt> is uniform histogram or not
|
127
|
+
* @overload is_uniform?
|
128
|
+
* @return [Boolean] Uniform or not
|
129
|
+
* @opencv_func CV_IS_UNIFORM_HIST
|
163
130
|
*/
|
164
131
|
VALUE
|
165
132
|
rb_is_uniform(VALUE self)
|
@@ -168,9 +135,10 @@ rb_is_uniform(VALUE self)
|
|
168
135
|
}
|
169
136
|
|
170
137
|
/*
|
171
|
-
*
|
172
|
-
*
|
173
|
-
*
|
138
|
+
* Returns <tt>self</tt> is sparse histogram or not
|
139
|
+
* @overload is_sparse?
|
140
|
+
* @return [Boolean] Sparse or not
|
141
|
+
* @opencv_func CV_IS_SPARSE_HIST
|
174
142
|
*/
|
175
143
|
VALUE
|
176
144
|
rb_is_sparse(VALUE self)
|
@@ -179,21 +147,45 @@ rb_is_sparse(VALUE self)
|
|
179
147
|
}
|
180
148
|
|
181
149
|
/*
|
182
|
-
*
|
183
|
-
*
|
184
|
-
|
150
|
+
* Returns <tt>self</tt> has range or not
|
151
|
+
* @overload has_range?
|
152
|
+
* @return [Boolean] Has range or not
|
153
|
+
* @opencv_func CV_HIST_HAS_RANGES
|
154
|
+
*/
|
185
155
|
VALUE
|
186
156
|
rb_has_range(VALUE self)
|
187
157
|
{
|
188
158
|
return CV_HIST_HAS_RANGES(CVHISTOGRAM(self)) ? Qtrue : Qfalse;
|
189
159
|
}
|
190
160
|
|
161
|
+
/*
|
162
|
+
* Calculates a histogram of a set of arrays.
|
163
|
+
* @overload calc_hist(images, accumulate=nil, mask=nil)
|
164
|
+
* @param images [Array<IplImage>]
|
165
|
+
* Source arrays. They all should have the same depth, CV_8U or CV_32F, and the same size.
|
166
|
+
* Each of them can have an arbitrary number of channels.
|
167
|
+
* @param accumulate [Boolean]
|
168
|
+
* Accumulation flag. If it is set, the histogram is not cleared in the beginning when it is allocated.
|
169
|
+
* This feature enables you to compute a single histogram from several sets of arrays,
|
170
|
+
* or to update the histogram in time.
|
171
|
+
* @param mask [CvMat]
|
172
|
+
* Optional mask. If the matrix is not empty, it must be an 8-bit array of the same size as images[i].
|
173
|
+
* The non-zero mask elements mark the array elements counted in the histogram.
|
174
|
+
* @return [CvHistogram] Histogram of a set of arrays
|
175
|
+
* @opencv_func cvCalcHist
|
176
|
+
*/
|
191
177
|
VALUE
|
192
178
|
rb_calc_hist(int argc, VALUE* argv, VALUE self)
|
193
179
|
{
|
194
180
|
return rb_calc_hist_bang(argc, argv, rb_copy_hist(self));
|
195
181
|
}
|
196
182
|
|
183
|
+
/*
|
184
|
+
* Calculates a histogram of a set of arrays.
|
185
|
+
* @overload calc_hist!(images, accumulate=nil, mask=nil)
|
186
|
+
* @see #calc_hist
|
187
|
+
* @opencv_func cvCalcHist
|
188
|
+
*/
|
197
189
|
VALUE
|
198
190
|
rb_calc_hist_bang(int argc, VALUE* argv, VALUE self)
|
199
191
|
{
|
@@ -218,8 +210,17 @@ rb_calc_hist_bang(int argc, VALUE* argv, VALUE self)
|
|
218
210
|
}
|
219
211
|
|
220
212
|
/*
|
221
|
-
*
|
222
|
-
*
|
213
|
+
* Queries the value of the histogram bin.
|
214
|
+
* @overload [](idx0)
|
215
|
+
* @overload [](idx0, idx1)
|
216
|
+
* @overload [](idx0, idx1, idx2)
|
217
|
+
* @overload [](idx0, idx1, idx2, idx3, ...)
|
218
|
+
* @param idx* [Integer] *-th index
|
219
|
+
* @return [Number] The value of the specified bin of the 1D, 2D, 3D, or N-D histogram.
|
220
|
+
* @opencv_func cvQueryHistValue_1D
|
221
|
+
* @opencv_func cvQueryHistValue_2D
|
222
|
+
* @opencv_func cvQueryHistValue_3D
|
223
|
+
* @opencv_func cvQueryHistValue_nD
|
223
224
|
*/
|
224
225
|
VALUE
|
225
226
|
rb_aref(VALUE self, VALUE args)
|
@@ -256,6 +257,18 @@ rb_aref(VALUE self, VALUE args)
|
|
256
257
|
return rb_float_new((double)value);
|
257
258
|
}
|
258
259
|
|
260
|
+
/*
|
261
|
+
* Finds the minimum and maximum histogram bins.
|
262
|
+
* @overload min_max_value
|
263
|
+
* @return [Array]
|
264
|
+
* [min_value, max_value, min_idx, max_idx]: Array of the minimum / maximum value of the histogram
|
265
|
+
* and their coordinates.
|
266
|
+
* - min_value: The minimum value of the histogram.
|
267
|
+
* - max_value: The maximum value of the histogram.
|
268
|
+
* - min_idx: The array of coordinates for the minimum.
|
269
|
+
* - max_idx: The array of coordinates for the maximum.
|
270
|
+
* @opencv_func cvGetMinMaxHistValue
|
271
|
+
*/
|
259
272
|
VALUE
|
260
273
|
rb_min_max_value(VALUE self)
|
261
274
|
{
|
@@ -286,8 +299,16 @@ rb_min_max_value(VALUE self)
|
|
286
299
|
}
|
287
300
|
|
288
301
|
/*
|
289
|
-
*
|
290
|
-
*
|
302
|
+
* Returns number of array dimensions
|
303
|
+
* @overload [](idx0, idx1, ...)
|
304
|
+
* @param idx* [Integer] *-th index
|
305
|
+
* @return [Array<Integer, Array<Integer>>]
|
306
|
+
* [dims, sizes]: Number of array dimensions and its sizes.
|
307
|
+
* - dims (Integer): Number of array dimensions
|
308
|
+
* - sizes (Array<Integer>): Vector of the array dimension sizes.
|
309
|
+
* For 2D arrays the number of rows (height) goes first,
|
310
|
+
* number of columns (width) next.
|
311
|
+
* @opencv_func cvGetDims
|
291
312
|
*/
|
292
313
|
VALUE
|
293
314
|
rb_dims(VALUE self)
|
@@ -309,10 +330,10 @@ rb_dims(VALUE self)
|
|
309
330
|
}
|
310
331
|
|
311
332
|
/*
|
312
|
-
*
|
313
|
-
*
|
314
|
-
*
|
315
|
-
*
|
333
|
+
* Clones histogram
|
334
|
+
* @overload copy_hist
|
335
|
+
* @return [CvHistogram] Copy of the histogram
|
336
|
+
* @opencv_func cvCopyHist
|
316
337
|
*/
|
317
338
|
VALUE
|
318
339
|
rb_copy_hist(VALUE self)
|
@@ -328,8 +349,11 @@ rb_copy_hist(VALUE self)
|
|
328
349
|
}
|
329
350
|
|
330
351
|
/*
|
331
|
-
*
|
332
|
-
*
|
352
|
+
* Sets all histogram bins to 0 in case of dense histogram
|
353
|
+
* and removes all histogram bins in case of sparse array.
|
354
|
+
* @overload clear_hist
|
355
|
+
* @return [CvHistogram] Cleared histogram
|
356
|
+
* @opencv_func cvClearHist
|
333
357
|
*/
|
334
358
|
VALUE
|
335
359
|
rb_clear_hist(VALUE self)
|
@@ -338,10 +362,13 @@ rb_clear_hist(VALUE self)
|
|
338
362
|
}
|
339
363
|
|
340
364
|
/*
|
341
|
-
*
|
342
|
-
*
|
343
|
-
*
|
344
|
-
*
|
365
|
+
* Sets all histogram bins to 0 in case of dense histogram
|
366
|
+
* and removes all histogram bins in case of sparse array.
|
367
|
+
* This method changes <tt>self</tt>.
|
368
|
+
* @overload clear_hist!
|
369
|
+
* @see #clear_hist
|
370
|
+
* @return [CvHistogram] Cleared histogram
|
371
|
+
* @opencv_func cvClearHist
|
345
372
|
*/
|
346
373
|
VALUE
|
347
374
|
rb_clear_hist_bang(VALUE self)
|
@@ -356,10 +383,12 @@ rb_clear_hist_bang(VALUE self)
|
|
356
383
|
}
|
357
384
|
|
358
385
|
/*
|
359
|
-
*
|
360
|
-
*
|
361
|
-
*
|
362
|
-
*
|
386
|
+
* Returns normalized the histogram bins by scaling them,
|
387
|
+
* such that the sum of the bins becomes equal to <tt>factor</tt>.
|
388
|
+
* @overload normalize(factor)
|
389
|
+
* @param factor [Number] Normalization factor. The sum of the bins becomes equal to this value.
|
390
|
+
* @return [CvHistogram] Normalized histogram
|
391
|
+
* @opencv_func cvNormalizeHist
|
363
392
|
*/
|
364
393
|
VALUE
|
365
394
|
rb_normalize_hist(VALUE self, VALUE factor)
|
@@ -368,10 +397,14 @@ rb_normalize_hist(VALUE self, VALUE factor)
|
|
368
397
|
}
|
369
398
|
|
370
399
|
/*
|
371
|
-
*
|
372
|
-
*
|
373
|
-
*
|
374
|
-
*
|
400
|
+
* Returns normalized the histogram bins by scaling them,
|
401
|
+
* such that the sum of the bins becomes equal to <tt>factor</tt>.
|
402
|
+
* This method changes <tt>self</tt>.
|
403
|
+
* @overload normalize!(factor)
|
404
|
+
* @param factor [Number] Normalization factor. The sum of the bins becomes equal to this value.
|
405
|
+
* @return [CvHistogram] Normalized histogram
|
406
|
+
* @see #normalize
|
407
|
+
* @opencv_func cvNormalizeHist
|
375
408
|
*/
|
376
409
|
VALUE
|
377
410
|
rb_normalize_hist_bang(VALUE self, VALUE factor)
|
@@ -386,10 +419,11 @@ rb_normalize_hist_bang(VALUE self, VALUE factor)
|
|
386
419
|
}
|
387
420
|
|
388
421
|
/*
|
389
|
-
*
|
390
|
-
*
|
391
|
-
*
|
392
|
-
*
|
422
|
+
* Returns cleared histogram bins that are below the specified threshold.
|
423
|
+
* @overload thresh_hist(threshold)
|
424
|
+
* @param threshold [Number] Threshold value
|
425
|
+
* @return [CvHistogram] Cleared histogram
|
426
|
+
* @opencv_func cvThreshHist
|
393
427
|
*/
|
394
428
|
VALUE
|
395
429
|
rb_thresh_hist(VALUE self, VALUE threshold)
|
@@ -398,10 +432,13 @@ rb_thresh_hist(VALUE self, VALUE threshold)
|
|
398
432
|
}
|
399
433
|
|
400
434
|
/*
|
401
|
-
* call-seq:
|
402
|
-
* thresh_hist!(<i>threshold</i>) -> self
|
403
|
-
*
|
404
435
|
* Cleares histogram bins that are below the specified threshold.
|
436
|
+
* This method changes <tt>self</tt>.
|
437
|
+
* @overload thresh_hist!(threshold)
|
438
|
+
* @param threshold [Number] Threshold value
|
439
|
+
* @return [CvHistogram] Cleared histogram
|
440
|
+
* @see #thresh_hist
|
441
|
+
* @opencv_func cvThreshHist
|
405
442
|
*/
|
406
443
|
VALUE
|
407
444
|
rb_thresh_hist_bang(VALUE self, VALUE threshold)
|
@@ -415,12 +452,39 @@ rb_thresh_hist_bang(VALUE self, VALUE threshold)
|
|
415
452
|
return self;
|
416
453
|
}
|
417
454
|
|
455
|
+
/*
|
456
|
+
* Sets the bounds of the histogram bins.
|
457
|
+
* @overload set_hist_bin_ranges(ranges, uniform=true)
|
458
|
+
* @param ranges [Array<Number>]
|
459
|
+
* Array of ranges for the histogram bins. Its meaning depends on the uniform parameter value.
|
460
|
+
* The ranges are used when the histogram is calculated or backprojected to determine
|
461
|
+
* which histogram bin corresponds to which value/tuple of values from the input image(s).
|
462
|
+
* @param uniform [Boolean]
|
463
|
+
* Uniformity flag.
|
464
|
+
* @return [CvHistogram]
|
465
|
+
* Histogram
|
466
|
+
* @opencv_func cvSetHistBinRanges
|
467
|
+
*/
|
418
468
|
VALUE
|
419
469
|
rb_set_hist_bin_ranges(int argc, VALUE* argv, VALUE self)
|
420
470
|
{
|
421
471
|
return rb_set_hist_bin_ranges_bang(argc, argv, rb_copy_hist(self));
|
422
472
|
}
|
423
473
|
|
474
|
+
/*
|
475
|
+
* Sets the bounds of the histogram bins. This method changes <tt>self</tt>.
|
476
|
+
* @overload set_hist_bin_ranges!(ranges, uniform=true)
|
477
|
+
* @param ranges [Array<Number>]
|
478
|
+
* Array of ranges for the histogram bins. Its meaning depends on the uniform parameter value.
|
479
|
+
* The ranges are used when the histogram is calculated or backprojected to determine
|
480
|
+
* which histogram bin corresponds to which value/tuple of values from the input image(s).
|
481
|
+
* @param uniform [Boolean]
|
482
|
+
* Uniformity flag.
|
483
|
+
* @return [CvHistogram]
|
484
|
+
* Histogram
|
485
|
+
* @see #set_hist_bin_ranges
|
486
|
+
* @opencv_func cvSetHistBinRanges
|
487
|
+
*/
|
424
488
|
VALUE
|
425
489
|
rb_set_hist_bin_ranges_bang(int argc, VALUE* argv, VALUE self)
|
426
490
|
{
|
@@ -446,6 +510,17 @@ rb_set_hist_bin_ranges_bang(int argc, VALUE* argv, VALUE self)
|
|
446
510
|
return self;
|
447
511
|
}
|
448
512
|
|
513
|
+
/*
|
514
|
+
* Calculates the back projection of a histogram.
|
515
|
+
* @overload calc_back_project(images)
|
516
|
+
* @param images [Array<IplImage>]
|
517
|
+
* Source arrays. They all should have the same depth, CV_8U or CV_32F, and the same size.
|
518
|
+
* Each of them can have an arbitrary number of channels.
|
519
|
+
* @return [CvMat,IplImage]
|
520
|
+
* Destination back projection array that is a single-channel array of the same size and depth
|
521
|
+
* as the first element of <tt>images</tt>
|
522
|
+
* @opencv_func cvCalcBackProject
|
523
|
+
*/
|
449
524
|
VALUE
|
450
525
|
rb_calc_back_project(VALUE self, VALUE image)
|
451
526
|
{
|
@@ -475,6 +550,24 @@ rb_calc_back_project(VALUE self, VALUE image)
|
|
475
550
|
return back_project;
|
476
551
|
}
|
477
552
|
|
553
|
+
/*
|
554
|
+
* Locates a template within an image by using a histogram comparison.
|
555
|
+
* @overload calc_back_project_patch(images, patch_size, method, factor)
|
556
|
+
* @param images [Array<IplImage>] Source arrays.
|
557
|
+
* @param pach_size [CvSize] Size of the patch slid though the source image.
|
558
|
+
* @param method [Integer]
|
559
|
+
* Comparison method that could be one of the following:
|
560
|
+
* - <tt>CV_COMP_CORREL</tt>: Correlation
|
561
|
+
* - <tt>CV_COMP_CHISQR</tt>: Chi-Square
|
562
|
+
* - <tt>CV_COMP_INTERSECT</tt>: Intersection
|
563
|
+
* - <tt>CV_COMP_BHATTACHARYYA</tt>: Bhattacharyya distance
|
564
|
+
* - <tt>CV_COMP_HELLINGER</tt>: Synonym for <tt>CV_COMP_BHATTACHARYYA</tt>
|
565
|
+
* @param factor [Number]
|
566
|
+
* Normalization factor for histograms that affects the normalization scale
|
567
|
+
* of the destination image. Pass 1 if not sure.
|
568
|
+
* @return [CvMat,IplImage] Destination image.
|
569
|
+
* @opencv_func cvCalcBackProject
|
570
|
+
*/
|
478
571
|
VALUE
|
479
572
|
rb_calc_back_project_patch(VALUE self, VALUE image, VALUE patch_size, VALUE method, VALUE factor)
|
480
573
|
{
|
@@ -507,6 +600,22 @@ rb_calc_back_project_patch(VALUE self, VALUE image, VALUE patch_size, VALUE meth
|
|
507
600
|
return dst;
|
508
601
|
}
|
509
602
|
|
603
|
+
/*
|
604
|
+
* Compares two histograms.
|
605
|
+
* @overload compare_hist(hist1, hist2, method)
|
606
|
+
* @param hist1 [CvHistogram] First compared histogram.
|
607
|
+
* @param hist2 [CvHistogram] Second compared histogram of the same size as <tt>hist1</tt>.
|
608
|
+
* @param method [Integer]
|
609
|
+
* Comparison method that could be one of the following:
|
610
|
+
* - <tt>CV_COMP_CORREL</tt>: Correlation
|
611
|
+
* - <tt>CV_COMP_CHISQR</tt>: Chi-Square
|
612
|
+
* - <tt>CV_COMP_INTERSECT</tt>: Intersection
|
613
|
+
* - <tt>CV_COMP_BHATTACHARYYA</tt>: Bhattacharyya distance
|
614
|
+
* - <tt>CV_COMP_HELLINGER</tt>: Synonym for <tt>CV_COMP_BHATTACHARYYA</tt>
|
615
|
+
* @return [Number] Distance of the two histograms.
|
616
|
+
* @scope class
|
617
|
+
* @opencv_func cvCompareHist
|
618
|
+
*/
|
510
619
|
VALUE
|
511
620
|
rb_compare_hist(VALUE self, VALUE hist1, VALUE hist2, VALUE method)
|
512
621
|
{
|
@@ -522,6 +631,15 @@ rb_compare_hist(VALUE self, VALUE hist1, VALUE hist2, VALUE method)
|
|
522
631
|
return rb_float_new(result);
|
523
632
|
}
|
524
633
|
|
634
|
+
/*
|
635
|
+
* Divides one histogram by another.
|
636
|
+
* @overload calc_prob_density(hist1, hist2, scale=255)
|
637
|
+
* @param hist1 [CvHistogram] First histogram (the divisor).
|
638
|
+
* @param hist2 [CvHistogram] Second histogram.
|
639
|
+
* @param scale [Number] Scale factor for the destination histogram.
|
640
|
+
* @return [CvHistogram] Destination histogram.
|
641
|
+
* @opencv_func cvCalcProbDensity
|
642
|
+
*/
|
525
643
|
VALUE
|
526
644
|
rb_calc_prob_density(int argc, VALUE* argv, VALUE self)
|
527
645
|
{
|
@@ -542,5 +660,56 @@ rb_calc_prob_density(int argc, VALUE* argv, VALUE self)
|
|
542
660
|
return dst_hist;
|
543
661
|
}
|
544
662
|
|
663
|
+
void
|
664
|
+
init_ruby_class()
|
665
|
+
{
|
666
|
+
#if 0
|
667
|
+
// For documentation using YARD
|
668
|
+
VALUE opencv = rb_define_module("OpenCV");
|
669
|
+
#endif
|
670
|
+
|
671
|
+
if (rb_klass)
|
672
|
+
return;
|
673
|
+
|
674
|
+
VALUE opencv = rb_module_opencv();
|
675
|
+
rb_klass = rb_define_class_under(opencv, "CvHistogram", rb_cObject);
|
676
|
+
rb_define_alloc_func(rb_klass, rb_allocate);
|
677
|
+
rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
678
|
+
rb_define_method(rb_klass, "is_uniform?", RUBY_METHOD_FUNC(rb_is_uniform), 0);
|
679
|
+
rb_define_method(rb_klass, "is_sparse?", RUBY_METHOD_FUNC(rb_is_sparse), 0);
|
680
|
+
rb_define_method(rb_klass, "has_range?", RUBY_METHOD_FUNC(rb_has_range), 0);
|
681
|
+
rb_define_method(rb_klass, "dims", RUBY_METHOD_FUNC(rb_dims), 0);
|
682
|
+
rb_define_method(rb_klass, "calc_hist", RUBY_METHOD_FUNC(rb_calc_hist), -1);
|
683
|
+
rb_define_method(rb_klass, "calc_hist!", RUBY_METHOD_FUNC(rb_calc_hist_bang), -1);
|
684
|
+
rb_define_method(rb_klass, "[]", RUBY_METHOD_FUNC(rb_aref), -2);
|
685
|
+
rb_define_alias(rb_klass, "query_hist_value", "[]");
|
686
|
+
rb_define_method(rb_klass, "min_max_value", RUBY_METHOD_FUNC(rb_min_max_value), 0);
|
687
|
+
rb_define_method(rb_klass, "copy_hist", RUBY_METHOD_FUNC(rb_copy_hist), 0);
|
688
|
+
|
689
|
+
rb_define_method(rb_klass, "clear_hist", RUBY_METHOD_FUNC(rb_clear_hist), 0);
|
690
|
+
rb_define_alias(rb_klass, "clear", "clear_hist");
|
691
|
+
rb_define_method(rb_klass, "clear_hist!", RUBY_METHOD_FUNC(rb_clear_hist_bang), 0);
|
692
|
+
rb_define_alias(rb_klass, "clear!", "clear_hist!");
|
693
|
+
|
694
|
+
rb_define_method(rb_klass, "normalize_hist", RUBY_METHOD_FUNC(rb_normalize_hist), 1);
|
695
|
+
rb_define_alias(rb_klass, "normalize", "normalize_hist");
|
696
|
+
rb_define_method(rb_klass, "normalize_hist!", RUBY_METHOD_FUNC(rb_normalize_hist_bang), 1);
|
697
|
+
rb_define_alias(rb_klass, "normalize!", "normalize_hist!");
|
698
|
+
|
699
|
+
rb_define_method(rb_klass, "thresh_hist", RUBY_METHOD_FUNC(rb_thresh_hist), 1);
|
700
|
+
rb_define_alias(rb_klass, "thresh", "thresh_hist");
|
701
|
+
rb_define_method(rb_klass, "thresh_hist!", RUBY_METHOD_FUNC(rb_thresh_hist_bang), 1);
|
702
|
+
rb_define_alias(rb_klass, "thresh!", "thresh_hist!");
|
703
|
+
|
704
|
+
rb_define_method(rb_klass, "set_hist_bin_ranges", RUBY_METHOD_FUNC(rb_set_hist_bin_ranges), -1);
|
705
|
+
rb_define_method(rb_klass, "set_hist_bin_ranges!", RUBY_METHOD_FUNC(rb_set_hist_bin_ranges_bang), -1);
|
706
|
+
|
707
|
+
rb_define_method(rb_klass, "calc_back_project", RUBY_METHOD_FUNC(rb_calc_back_project), 1);
|
708
|
+
rb_define_method(rb_klass, "calc_back_project_patch", RUBY_METHOD_FUNC(rb_calc_back_project_patch), 4);
|
709
|
+
|
710
|
+
rb_define_singleton_method(rb_klass, "calc_prob_density", RUBY_METHOD_FUNC(rb_calc_prob_density), -1);
|
711
|
+
rb_define_singleton_method(rb_klass, "compare_hist", RUBY_METHOD_FUNC(rb_compare_hist), 3);
|
712
|
+
}
|
713
|
+
|
545
714
|
__NAMESPACE_END_CVHISTOGRAM
|
546
715
|
__NAMESPACE_END_OPENCV
|