mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
Added getLayerNames() to Net and improved blobFromImage();
This commit is contained in:
parent
256df73e7b
commit
46c5a08025
3 changed files with 40 additions and 4 deletions
|
@ -31,10 +31,23 @@ namespace rubyopencv {
|
||||||
Check_Type(options, T_HASH);
|
Check_Type(options, T_HASH);
|
||||||
|
|
||||||
double scale_factor = NUM2DBL_DEFAULT(HASH_LOOKUP(options, "scale_factor"), 1.0);
|
double scale_factor = NUM2DBL_DEFAULT(HASH_LOOKUP(options, "scale_factor"), 1.0);
|
||||||
cv::Size *s = Size::obj2size(HASH_LOOKUP(options, "size"));
|
cv::Size size;
|
||||||
cv::Scalar *sc = Scalar::obj2scalar(HASH_LOOKUP(options, "mean"));;
|
cv::Scalar mean;
|
||||||
|
bool swap_rb = RTEST_DEFAULT(HASH_LOOKUP(options, "swap_rb"), true);
|
||||||
|
bool crop = RTEST_DEFAULT(HASH_LOOKUP(options, "crop"), true);
|
||||||
|
VALUE tmp = Qnil;
|
||||||
|
|
||||||
r = cv::dnn::blobFromImage(*m, scale_factor, *s, *sc);
|
tmp = HASH_LOOKUP(options, "size");
|
||||||
|
if (!NIL_P(tmp)) {
|
||||||
|
size = *(Size::obj2size(tmp));
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = HASH_LOOKUP(options, "mean");
|
||||||
|
if (!NIL_P(tmp)) {
|
||||||
|
mean = *(Scalar::obj2scalar(tmp));
|
||||||
|
}
|
||||||
|
|
||||||
|
r = cv::dnn::blobFromImage(*m, scale_factor, size, mean, swap_rb, crop);
|
||||||
}
|
}
|
||||||
|
|
||||||
b = new cv::Mat(r);
|
b = new cv::Mat(r);
|
||||||
|
|
|
@ -96,15 +96,34 @@ namespace rubyopencv {
|
||||||
return selfptr->empty() ? Qtrue : Qfalse;
|
return selfptr->empty() ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VALUE rb_get_layer_names(VALUE self) {
|
||||||
|
cv::dnn::Net* selfptr = obj2net(self);
|
||||||
|
|
||||||
|
std::vector<cv::String> v = selfptr->getLayerNames();
|
||||||
|
const long size = v.size();
|
||||||
|
|
||||||
|
VALUE layer_names = rb_ary_new_capa(size);
|
||||||
|
for (long i = 0; i < size; i++) {
|
||||||
|
VALUE layer_name = rb_str_new_cstr(v[i].c_str());
|
||||||
|
rb_ary_store(layer_names, i, layer_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return layer_names;
|
||||||
|
}
|
||||||
|
|
||||||
void init(VALUE rb_module) {
|
void init(VALUE rb_module) {
|
||||||
rb_klass = rb_define_class_under(rb_module, "Net", rb_cData);
|
rb_klass = rb_define_class_under(rb_module, "Net", rb_cData);
|
||||||
rb_define_alloc_func(rb_klass, rb_allocate);
|
rb_define_alloc_func(rb_klass, rb_allocate);
|
||||||
|
|
||||||
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), 0);
|
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), 0);
|
||||||
|
|
||||||
rb_define_method(rb_klass, "set_input", RUBY_METHOD_FUNC(rb_set_input), -1);
|
rb_define_method(rb_klass, "input=", RUBY_METHOD_FUNC(rb_set_input), -1);
|
||||||
|
rb_define_alias(rb_klass, "set_input", "input=");
|
||||||
|
|
||||||
rb_define_method(rb_klass, "forward", RUBY_METHOD_FUNC(rb_forward), -1);
|
rb_define_method(rb_klass, "forward", RUBY_METHOD_FUNC(rb_forward), -1);
|
||||||
rb_define_method(rb_klass, "empty?", RUBY_METHOD_FUNC(rb_empty), 0);
|
rb_define_method(rb_klass, "empty?", RUBY_METHOD_FUNC(rb_empty), 0);
|
||||||
|
|
||||||
|
rb_define_method(rb_klass, "get_layer_names", RUBY_METHOD_FUNC(rb_get_layer_names), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,10 @@ namespace rubyopencv {
|
||||||
return NIL_P(value) ? (default_value) : NUM2DBL(value);
|
return NIL_P(value) ? (default_value) : NUM2DBL(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline double RTEST_DEFAULT(VALUE value, bool default_value) {
|
||||||
|
return NIL_P(value) ? (default_value) : (RTEST(value) ? true : false);
|
||||||
|
}
|
||||||
|
|
||||||
inline VALUE HASH_LOOKUP(VALUE hash, std::string key) {
|
inline VALUE HASH_LOOKUP(VALUE hash, std::string key) {
|
||||||
return rb_hash_lookup(hash, ID2SYM(rb_intern(key.c_str())));
|
return rb_hash_lookup(hash, ID2SYM(rb_intern(key.c_str())));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue