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:
parent
390843038f
commit
108b6cbd82
5 changed files with 26 additions and 31 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue