1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

use cv::Mat::setDefaultAllocator

This commit is contained in:
ser1zw 2016-04-10 02:12:32 +09:00
parent 390843038f
commit 108b6cbd82
5 changed files with 26 additions and 31 deletions

View file

@ -41,12 +41,6 @@ namespace rubyopencv {
return mat2obj(ptr, rb_klass);
}
cv::Mat* empty_mat() {
cv::Mat* m = new cv::Mat();
m->allocator = &allocator;
return m;
}
void free_mat(void* ptr) {
if (ptr) {
cv::Mat* dataptr = (cv::Mat*)ptr;
@ -96,7 +90,7 @@ namespace rubyopencv {
return Qnil;
}
dataptr = empty_mat();
dataptr = new cv::Mat();
tempdata.copyTo(*dataptr);
RTYPEDDATA_DATA(self) = dataptr;
@ -122,7 +116,7 @@ namespace rubyopencv {
VALUE rb_zeros(VALUE self, VALUE rows, VALUE cols, VALUE type) {
cv::Mat* destptr = NULL;
try {
destptr = empty_mat();
destptr = new cv::Mat();
cv::Mat z = cv::Mat::zeros(NUM2INT(rows), NUM2INT(cols), NUM2INT(type));
z.copyTo(*destptr);
}
@ -147,7 +141,7 @@ namespace rubyopencv {
VALUE rb_ones(VALUE self, VALUE rows, VALUE cols, VALUE type) {
cv::Mat* destptr = NULL;
try {
destptr = empty_mat();
destptr = new cv::Mat();
cv::Mat z = cv::Mat::ones(NUM2INT(rows), NUM2INT(cols), NUM2INT(type));
z.copyTo(*destptr);
}
@ -172,7 +166,7 @@ namespace rubyopencv {
VALUE rb_eye(VALUE self, VALUE rows, VALUE cols, VALUE type) {
cv::Mat* destptr = NULL;
try {
destptr = empty_mat();
destptr = new cv::Mat();
cv::Mat z = cv::Mat::eye(NUM2INT(rows), NUM2INT(cols), NUM2INT(type));
z.copyTo(*destptr);
}
@ -195,7 +189,7 @@ namespace rubyopencv {
cv::Mat* selfptr = obj2mat(self);
cv::Mat* dataptr = NULL;
try {
dataptr = empty_mat();
dataptr = new cv::Mat();
selfptr->copyTo(*dataptr);
RTYPEDDATA_DATA(clone) = dataptr;
}
@ -216,7 +210,7 @@ namespace rubyopencv {
return Qnil;
}
dataptr = empty_mat();
dataptr = new cv::Mat();
tmp.copyTo(*dataptr);
}
catch (cv::Exception& e) {
@ -341,7 +335,7 @@ namespace rubyopencv {
data[i] = (uchar)(NUM2INT(RARRAY_AREF(buf, i)) & 0xff);
}
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
cv::imdecode(data, NUM2INT(flags), dstptr);
}
@ -596,7 +590,7 @@ namespace rubyopencv {
*/
VALUE rb_add(VALUE self, VALUE other) {
cv::Mat* selfptr = obj2mat(self);
cv::Mat* retptr = empty_mat();
cv::Mat* retptr = new cv::Mat();
cv::Mat tmp;
try {
@ -632,7 +626,7 @@ namespace rubyopencv {
*/
VALUE rb_sub(VALUE self, VALUE other) {
cv::Mat* selfptr = obj2mat(self);
cv::Mat* retptr = empty_mat();
cv::Mat* retptr = new cv::Mat();
cv::Mat tmp;
try {
@ -668,7 +662,7 @@ namespace rubyopencv {
*/
VALUE rb_mul(VALUE self, VALUE other) {
cv::Mat* selfptr = obj2mat(self);
cv::Mat* retptr = empty_mat();
cv::Mat* retptr = new cv::Mat();
cv::Mat tmp;
try {
@ -700,7 +694,7 @@ namespace rubyopencv {
*/
VALUE rb_div(VALUE self, VALUE other) {
cv::Mat* selfptr = obj2mat(self);
cv::Mat* retptr = empty_mat();
cv::Mat* retptr = new cv::Mat();
cv::Mat tmp;
try {
@ -734,7 +728,7 @@ namespace rubyopencv {
VALUE value, mask;
rb_scan_args(argc, argv, "11", &value, &mask);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
cv::Mat tmp;
cv::Scalar* s = Scalar::obj2scalar(value);
@ -778,7 +772,7 @@ namespace rubyopencv {
cv::Mat* src1ptr = obj2mat(src1);
cv::Mat* src2ptr = obj2mat(src2);
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
cv::addWeighted(*src1ptr, NUM2DBL(alpha), *src2ptr, NUM2DBL(beta), NUM2DBL(gamma), *dstptr, dtype_value);
}
@ -806,7 +800,7 @@ namespace rubyopencv {
double beta_value = NIL_P(beta) ? 0 : NUM2DBL(beta);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
cv::convertScaleAbs(*selfptr, *dstptr, alpha_value, beta_value);
}
@ -837,7 +831,7 @@ namespace rubyopencv {
double beta_value = NIL_P(beta) ? 0 : NUM2DBL(beta);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
selfptr->convertTo(*dstptr, NUM2INT(rtype), alpha_value, beta_value);
}

View file

@ -17,7 +17,6 @@ namespace rubyopencv {
cv::Mat* obj2mat(VALUE obj);
VALUE mat2obj(cv::Mat* ptr);
VALUE mat2obj(cv::Mat* ptr, VALUE klass);
cv::Mat* empty_mat();
class RubyMatAllocator: public cv::MatAllocator {
public:

View file

@ -34,7 +34,7 @@ namespace rubyopencv {
int border_type_value = NIL_P(border_type) ? cv::BORDER_DEFAULT : NUM2INT(border_type);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* destptr = empty_mat();
cv::Mat* destptr = new cv::Mat();
try {
cv::Sobel(*selfptr, *destptr, NUM2INT(ddepth), NUM2INT(dx), NUM2INT(dy),
ksize_value, scale_value, delta_value, border_type_value);
@ -67,7 +67,7 @@ namespace rubyopencv {
bool l2gradient_value = RTEST(l2gradient) ? true : false;
cv::Mat* selfptr = obj2mat(self);
cv::Mat* destptr = empty_mat();
cv::Mat* destptr = new cv::Mat();
try {
cv::Canny(*selfptr, *destptr, NUM2DBL(threshold1), NUM2DBL(threshold2),
aperture_size_value, l2gradient_value);
@ -102,7 +102,7 @@ namespace rubyopencv {
int border_type_value = NIL_P(border_type) ? cv::BORDER_DEFAULT : NUM2INT(border_type);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* destptr = empty_mat();
cv::Mat* destptr = new cv::Mat();
try {
cv::Laplacian(*selfptr, *destptr, NUM2INT(ddepth), ksize_value, scale_value,
delta_value, border_type_value);
@ -130,7 +130,7 @@ namespace rubyopencv {
rb_scan_args(argc, argv, "11", &code, &dcn);
int dcn_value = NIL_P(dcn) ? 0 : NUM2INT(dcn);
cv::Mat* destptr = empty_mat();
cv::Mat* destptr = new cv::Mat();
cv::Mat* selfptr = obj2mat(self);
try {
cv::cvtColor(*selfptr, *destptr, NUM2INT(code), dcn_value);
@ -164,7 +164,7 @@ namespace rubyopencv {
rb_scan_args(argc, argv, "13", &size, &inv_scale_x, &inv_scale_y, &interpolation);
cv::Size* sizeptr = Size::obj2size(size);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* destptr = empty_mat();
cv::Mat* destptr = new cv::Mat();
double sx = NIL_P(inv_scale_x) ? 0 : NUM2DBL(inv_scale_x);
double sy = NIL_P(inv_scale_y) ? 0 : NUM2DBL(inv_scale_y);
int method = NIL_P(interpolation) ? CV_INTER_LINEAR : NUM2INT(interpolation);
@ -195,7 +195,7 @@ namespace rubyopencv {
int border_type_value = NIL_P(border_type) ? cv::BORDER_DEFAULT : NUM2INT(border_type);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
cv::blur(*selfptr, *dstptr, *(Size::obj2size(ksize)), anchor_value, border_type_value);
}
@ -227,7 +227,7 @@ namespace rubyopencv {
int border_type_value = NIL_P(border_type) ? cv::BORDER_DEFAULT : NUM2INT(border_type);
cv::Mat* selfptr = obj2mat(self);
cv::Mat* dstptr = empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
cv::GaussianBlur(*selfptr, *dstptr, *(Size::obj2size(ksize)), NUM2DBL(sigma_x),
sigma_y_value, border_type_value);

View file

@ -20,6 +20,7 @@
namespace rubyopencv {
VALUE rb_module = Qnil;
Mat::RubyMatAllocator allocator;
VALUE rb_module_opencv() {
return rb_module;
@ -78,6 +79,7 @@ namespace rubyopencv {
extern "C"
void Init_opencv() {
cv::Mat::setDefaultAllocator(&allocator);
cv::redirectError(error_callback, NULL, NULL);
rb_module = rb_define_module("Cv");

View file

@ -84,7 +84,7 @@ namespace rubyopencv {
*/
VALUE rb_read(VALUE self) {
cv::VideoCapture* selfptr = obj2videocapture(self);
cv::Mat* m = Mat::empty_mat();
cv::Mat* m = new cv::Mat();
try {
(*selfptr) >> (*m);
@ -233,7 +233,7 @@ namespace rubyopencv {
cv::VideoCapture* selfptr = obj2videocapture(self);
bool ret = false;
cv::Mat* dstptr = Mat::empty_mat();
cv::Mat* dstptr = new cv::Mat();
try {
ret = selfptr->retrieve(*dstptr, flag_value);
if (!ret) {