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;
|
VALUE row, column, depth, channel;
|
||||||
rb_scan_args(argc, argv, "22", &row, &column, &depth, &channel);
|
rb_scan_args(argc, argv, "22", &row, &column, &depth, &channel);
|
||||||
|
|
||||||
CvMat *ptr;
|
CvMat *ptr = rb_cvCreateMat(FIX2INT(row), FIX2INT(column),
|
||||||
try {
|
CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_8U), argc < 4 ? 3 : FIX2INT(channel)));
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(DATA_PTR(self));
|
free(DATA_PTR(self));
|
||||||
DATA_PTR(self) = ptr;
|
DATA_PTR(self) = ptr;
|
||||||
|
|
||||||
|
@ -1518,7 +1499,7 @@ rb_split(VALUE self)
|
||||||
CvSize size = cvGetSize(CVARR(self));
|
CvSize size = cvGetSize(CVARR(self));
|
||||||
CvMat *dest[] = {NULL, NULL, NULL, NULL};
|
CvMat *dest[] = {NULL, NULL, NULL, NULL};
|
||||||
for (int i = 0; i < channel; i++)
|
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]);
|
cvSplit(CVARR(self), dest[0], dest[1], dest[2], dest[3]);
|
||||||
VALUE ary = rb_ary_new2(channel);
|
VALUE ary = rb_ary_new2(channel);
|
||||||
for (int i = 0; i < channel; i++)
|
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);
|
good_features_to_track_option = GOOD_FEATURES_TO_TRACK_OPTION(good_features_to_track_option);
|
||||||
CvMat *src = CVMAT(self);
|
CvMat *src = CVMAT(self);
|
||||||
CvSize size = cvGetSize(src);
|
CvSize size = cvGetSize(src);
|
||||||
eigen = cvCreateMat(size.height, size.width, CV_MAKETYPE(CV_32F, 1));
|
eigen = rb_cvCreateMat(size.height, size.width, CV_MAKETYPE(CV_32F, 1));
|
||||||
tmp = 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);
|
int np = GF_MAX(good_features_to_track_option);
|
||||||
if(!(np > 0))
|
if(!(np > 0))
|
||||||
rb_raise(rb_eArgError, "option :max should be positive value.");
|
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);
|
CvSize size = cvGetSize(self_ptr);
|
||||||
VALUE dest = new_object(size, cvGetElemType(self_ptr));
|
VALUE dest = new_object(size, cvGetElemType(self_ptr));
|
||||||
if (operation == CV_MOP_GRADIENT) {
|
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));
|
cvMorphologyEx(self_ptr, CVARR(dest), temp, IPLCONVKERNEL(element), CV_MOP_GRADIENT, IF_INT(iteration, 1));
|
||||||
cvReleaseMat(&temp);
|
cvReleaseMat(&temp);
|
||||||
}
|
}
|
||||||
|
@ -5226,13 +5207,13 @@ rb_compute_correspond_epilines(VALUE klass, VALUE points, VALUE which_image, VAL
|
||||||
VALUE
|
VALUE
|
||||||
new_object(int rows, int cols, int type)
|
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
|
VALUE
|
||||||
new_object(CvSize size, int type)
|
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){
|
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;
|
cx = size.width/2;
|
||||||
|
@ -425,7 +425,7 @@ create_fourier_image(const IplImage *im)
|
||||||
dft_M = cvGetOptimalDFTSize( im->height - 1 );
|
dft_M = cvGetOptimalDFTSize( im->height - 1 );
|
||||||
dft_N = cvGetOptimalDFTSize( im->width - 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_Re = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);
|
||||||
image_Im = 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_module;
|
||||||
VALUE rb_opencv_constants;
|
VALUE rb_opencv_constants;
|
||||||
|
|
||||||
|
|
|
@ -185,6 +185,8 @@ void release_iplconvkernel_object(void *ptr);
|
||||||
VALUE rb_module_opencv();
|
VALUE rb_module_opencv();
|
||||||
void define_ruby_module();
|
void define_ruby_module();
|
||||||
|
|
||||||
|
CvMat* rb_cvCreateMat(int height, int width, int type);
|
||||||
|
|
||||||
// Ruby/OpenCV inline functions
|
// Ruby/OpenCV inline functions
|
||||||
inline CvArr*
|
inline CvArr*
|
||||||
CVARR(VALUE object)
|
CVARR(VALUE object)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue