mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
implemented rb_cvCreateMat and replaced cvCreateMat with rb_cvCreateMat to create a CvMat as much as possible
This commit is contained in:
parent
882b778e94
commit
196c567ee0
4 changed files with 41 additions and 29 deletions
|
@ -434,27 +434,8 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
|||
VALUE row, column, depth, channel;
|
||||
rb_scan_args(argc, argv, "22", &row, &column, &depth, &channel);
|
||||
|
||||
CvMat *ptr;
|
||||
try {
|
||||
ptr = cvCreateMat(FIX2INT(row), FIX2INT(column),
|
||||
CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_8U), argc < 4 ? 3 : FIX2INT(channel)));
|
||||
}
|
||||
catch(cv::Exception& e) {
|
||||
if (e.code != CV_StsNoMem) {
|
||||
rb_raise(rb_eRuntimeError, "%s", e.what());
|
||||
}
|
||||
|
||||
// When memory allocation is failed, run GC and retry it
|
||||
rb_gc_start();
|
||||
try {
|
||||
ptr = cvCreateMat(FIX2INT(row), FIX2INT(column),
|
||||
CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_8U), argc < 4 ? 3 : FIX2INT(channel)));
|
||||
}
|
||||
catch (...) {
|
||||
fprintf(stderr, "[FATAL] failed to allocate memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
CvMat *ptr = rb_cvCreateMat(FIX2INT(row), FIX2INT(column),
|
||||
CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_8U), argc < 4 ? 3 : FIX2INT(channel)));
|
||||
free(DATA_PTR(self));
|
||||
DATA_PTR(self) = ptr;
|
||||
|
||||
|
@ -1518,7 +1499,7 @@ rb_split(VALUE self)
|
|||
CvSize size = cvGetSize(CVARR(self));
|
||||
CvMat *dest[] = {NULL, NULL, NULL, NULL};
|
||||
for (int i = 0; i < channel; i++)
|
||||
dest[i] = cvCreateMat(size.height, size.width, CV_MAKETYPE(depth, 1));
|
||||
dest[i] = rb_cvCreateMat(size.height, size.width, CV_MAKETYPE(depth, 1));
|
||||
cvSplit(CVARR(self), dest[0], dest[1], dest[2], dest[3]);
|
||||
VALUE ary = rb_ary_new2(channel);
|
||||
for (int i = 0; i < channel; i++)
|
||||
|
@ -3226,8 +3207,8 @@ rb_good_features_to_track(int argc, VALUE *argv, VALUE self)
|
|||
good_features_to_track_option = GOOD_FEATURES_TO_TRACK_OPTION(good_features_to_track_option);
|
||||
CvMat *src = CVMAT(self);
|
||||
CvSize size = cvGetSize(src);
|
||||
eigen = cvCreateMat(size.height, size.width, CV_MAKETYPE(CV_32F, 1));
|
||||
tmp = cvCreateMat(size.height, size.width, CV_MAKETYPE(CV_32F, 1));
|
||||
eigen = rb_cvCreateMat(size.height, size.width, CV_MAKETYPE(CV_32F, 1));
|
||||
tmp = rb_cvCreateMat(size.height, size.width, CV_MAKETYPE(CV_32F, 1));
|
||||
int np = GF_MAX(good_features_to_track_option);
|
||||
if(!(np > 0))
|
||||
rb_raise(rb_eArgError, "option :max should be positive value.");
|
||||
|
@ -3584,7 +3565,7 @@ rb_morphology_internal(VALUE element, VALUE iteration, int operation, VALUE self
|
|||
CvSize size = cvGetSize(self_ptr);
|
||||
VALUE dest = new_object(size, cvGetElemType(self_ptr));
|
||||
if (operation == CV_MOP_GRADIENT) {
|
||||
CvMat* temp = cvCreateMat(size.height, size.width, cvGetElemType(self_ptr));
|
||||
CvMat* temp = rb_cvCreateMat(size.height, size.width, cvGetElemType(self_ptr));
|
||||
cvMorphologyEx(self_ptr, CVARR(dest), temp, IPLCONVKERNEL(element), CV_MOP_GRADIENT, IF_INT(iteration, 1));
|
||||
cvReleaseMat(&temp);
|
||||
}
|
||||
|
@ -5226,13 +5207,13 @@ rb_compute_correspond_epilines(VALUE klass, VALUE points, VALUE which_image, VAL
|
|||
VALUE
|
||||
new_object(int rows, int cols, int type)
|
||||
{
|
||||
return OPENCV_OBJECT(rb_klass, cvCreateMat(rows, cols, type));
|
||||
return OPENCV_OBJECT(rb_klass, rb_cvCreateMat(rows, cols, type));
|
||||
}
|
||||
|
||||
VALUE
|
||||
new_object(CvSize size, int type)
|
||||
{
|
||||
return OPENCV_OBJECT(rb_klass, cvCreateMat(size.height, size.width, type));
|
||||
return OPENCV_OBJECT(rb_klass, rb_cvCreateMat(size.height, size.width, type));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -363,7 +363,7 @@ cvShiftDFT(CvArr *src_arr, CvArr *dst_arr )
|
|||
}
|
||||
|
||||
if(src_arr==dst_arr){
|
||||
tmp = cvCreateMat(size.height/2, size.width/2, cvGetElemType(src_arr));
|
||||
tmp = rb_cvCreateMat(size.height/2, size.width/2, cvGetElemType(src_arr));
|
||||
}
|
||||
|
||||
cx = size.width/2;
|
||||
|
@ -425,7 +425,7 @@ create_fourier_image(const IplImage *im)
|
|||
dft_M = cvGetOptimalDFTSize( im->height - 1 );
|
||||
dft_N = cvGetOptimalDFTSize( im->width - 1 );
|
||||
|
||||
dft_A = cvCreateMat( dft_M, dft_N, CV_64FC2 );
|
||||
dft_A = rb_cvCreateMat( dft_M, dft_N, CV_64FC2 );
|
||||
image_Re = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);
|
||||
image_Im = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);
|
||||
|
||||
|
|
|
@ -129,6 +129,35 @@ release_iplconvkernel_object(void *ptr)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates CvMat and underlying data
|
||||
* When memory allocation is failed, run GC and retry it
|
||||
*/
|
||||
CvMat*
|
||||
rb_cvCreateMat(int height, int width, int type)
|
||||
{
|
||||
CvMat* ptr = NULL;
|
||||
try {
|
||||
ptr = cvCreateMat(height, width, type);
|
||||
}
|
||||
catch(cv::Exception& e) {
|
||||
if (e.code != CV_StsNoMem)
|
||||
rb_raise(rb_eRuntimeError, "%s", e.what());
|
||||
|
||||
rb_gc_start();
|
||||
try {
|
||||
ptr = cvCreateMat(height, width, type);
|
||||
}
|
||||
catch (cv::Exception& e) {
|
||||
if (e.code == CV_StsNoMem)
|
||||
rb_raise(rb_eNoMemError, "%s", e.what());
|
||||
else
|
||||
rb_raise(rb_eRuntimeError, "%s", e.what());
|
||||
}
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
VALUE rb_module;
|
||||
VALUE rb_opencv_constants;
|
||||
|
||||
|
|
|
@ -185,6 +185,8 @@ void release_iplconvkernel_object(void *ptr);
|
|||
VALUE rb_module_opencv();
|
||||
void define_ruby_module();
|
||||
|
||||
CvMat* rb_cvCreateMat(int height, int width, int type);
|
||||
|
||||
// Ruby/OpenCV inline functions
|
||||
inline CvArr*
|
||||
CVARR(VALUE object)
|
||||
|
|
Loading…
Add table
Reference in a new issue