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

changed some functions which call CVMAT_WITH_CHECK() to call CVARR_WITH_CHECK()

This commit is contained in:
ser1zw 2011-11-20 20:18:24 +09:00
parent fe28fc87d5
commit d49d62c7f8
4 changed files with 44 additions and 16 deletions

View file

@ -1502,9 +1502,8 @@ rb_reshape(VALUE self, VALUE hash)
VALUE VALUE
rb_repeat(VALUE self, VALUE object) rb_repeat(VALUE self, VALUE object)
{ {
CvMat* obj_ptr = CVMAT_WITH_CHECK(object);
try { try {
cvRepeat(CVARR(self), obj_ptr); cvRepeat(CVARR(self), CVARR_WITH_CHECK(object));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -1710,7 +1709,7 @@ rb_lut(VALUE self, VALUE lut)
{ {
VALUE dest = copy(self); VALUE dest = copy(self);
try { try {
cvLUT(CVARR(self), CVARR(dest), CVMAT_WITH_CHECK(lut)); cvLUT(CVARR(self), CVARR(dest), CVARR_WITH_CHECK(lut));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -1882,9 +1881,9 @@ rb_mat_mul(int argc, VALUE *argv, VALUE self)
dest = new_mat_kind_object(cvGetSize(self_ptr), self); dest = new_mat_kind_object(cvGetSize(self_ptr), self);
try { try {
if (NIL_P(shiftvec)) if (NIL_P(shiftvec))
cvMatMul(self_ptr, CVMAT_WITH_CHECK(val), CVARR(dest)); cvMatMul(self_ptr, CVARR_WITH_CHECK(val), CVARR(dest));
else else
cvMatMulAdd(self_ptr, CVMAT_WITH_CHECK(val), CVMAT_WITH_CHECK(shiftvec), CVARR(dest)); cvMatMulAdd(self_ptr, CVARR_WITH_CHECK(val), CVARR_WITH_CHECK(shiftvec), CVARR(dest));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -2354,7 +2353,7 @@ rb_dot_product(VALUE self, VALUE mat)
{ {
double result = 0.0; double result = 0.0;
try { try {
result = cvDotProduct(CVARR(self), CVMAT_WITH_CHECK(mat)); result = cvDotProduct(CVARR(self), CVARR_WITH_CHECK(mat));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -2376,7 +2375,7 @@ rb_cross_product(VALUE self, VALUE mat)
VALUE dest = Qnil; VALUE dest = Qnil;
try { try {
dest = new_mat_kind_object(cvGetSize(self_ptr), self); dest = new_mat_kind_object(cvGetSize(self_ptr), self);
cvCrossProduct(self_ptr, CVMAT_WITH_CHECK(mat), CVARR(dest)); cvCrossProduct(self_ptr, CVARR_WITH_CHECK(mat), CVARR(dest));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -2473,7 +2472,7 @@ rb_mul_transposed(int argc, VALUE *argv, VALUE self)
_order = LOOKUP_CVMETHOD(options, "order"); _order = LOOKUP_CVMETHOD(options, "order");
} }
CvArr* delta = NIL_P(_delta) ? NULL : CVMAT_WITH_CHECK(_delta); CvArr* delta = NIL_P(_delta) ? NULL : CVARR_WITH_CHECK(_delta);
double scale = NIL_P(_scale) ? 1.0 : NUM2DBL(_scale); double scale = NIL_P(_scale) ? 1.0 : NUM2DBL(_scale);
int order = NIL_P(_order) ? 0 : NUM2INT(_order); int order = NIL_P(_order) ? 0 : NUM2INT(_order);
CvArr* self_ptr = CVARR(self); CvArr* self_ptr = CVARR(self);
@ -2607,10 +2606,10 @@ rb_solve(int argc, VALUE *argv, VALUE self)
VALUE mat, symbol; VALUE mat, symbol;
rb_scan_args(argc, argv, "11", &mat, &symbol); rb_scan_args(argc, argv, "11", &mat, &symbol);
VALUE dest = Qnil; VALUE dest = Qnil;
CvMat* mat_ptr = CVMAT_WITH_CHECK(mat); CvArr* arr_ptr = CVARR_WITH_CHECK(mat);
try { try {
dest = new_mat_kind_object(cvGetSize(mat_ptr), self); dest = new_mat_kind_object(cvGetSize(arr_ptr), self);
cvSolve(CVARR(self), mat_ptr, CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU)); cvSolve(CVARR(self), arr_ptr, CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -3913,7 +3912,7 @@ rb_remap(int argc, VALUE *argv, VALUE self)
VALUE dest = Qnil; VALUE dest = Qnil;
try { try {
dest = new_mat_kind_object(cvGetSize(self_ptr), self); dest = new_mat_kind_object(cvGetSize(self_ptr), self);
cvRemap(self_ptr, CVARR(dest), CVMAT_WITH_CHECK(mapx), CVMAT_WITH_CHECK(mapy), cvRemap(self_ptr, CVARR(dest), CVARR_WITH_CHECK(mapx), CVARR_WITH_CHECK(mapy),
CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR) CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR)
| CVMETHOD("WARP_FLAG", option, CV_WARP_FILL_OUTLIERS), | CVMETHOD("WARP_FLAG", option, CV_WARP_FILL_OUTLIERS),
VALUE_TO_CVSCALAR(fillval)); VALUE_TO_CVSCALAR(fillval));
@ -4741,7 +4740,7 @@ VALUE
rb_watershed(VALUE self, VALUE markers) rb_watershed(VALUE self, VALUE markers)
{ {
try { try {
cvWatershed(CVARR(self), CVMAT_WITH_CHECK(markers)); cvWatershed(CVARR(self), CVARR_WITH_CHECK(markers));
} }
catch (cv::Exception& e) { catch (cv::Exception& e) {
raise_cverror(e); raise_cverror(e);
@ -4960,7 +4959,7 @@ rb_match_template(int argc, VALUE *argv, VALUE self)
method_flag = CVMETHOD("MATCH_TEMPLATE_METHOD", method); method_flag = CVMETHOD("MATCH_TEMPLATE_METHOD", method);
CvArr* self_ptr = CVARR(self); CvArr* self_ptr = CVARR(self);
CvMat* templ_ptr = CVMAT_WITH_CHECK(templ); CvArr* templ_ptr = CVARR_WITH_CHECK(templ);
VALUE result = Qnil; VALUE result = Qnil;
try { try {
CvSize src_size = cvGetSize(self_ptr); CvSize src_size = cvGetSize(self_ptr);

View file

@ -11,16 +11,28 @@
void void
raise_typeerror(VALUE object, VALUE expected_class) raise_typeerror(VALUE object, VALUE expected_class)
{
raise_typeerror(object, rb_class2name(expected_class));
}
void
raise_typeerror(VALUE object, const char* expected_class_name)
{ {
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
rb_obj_classname(object), rb_class2name(expected_class)); rb_obj_classname(object), expected_class_name);
} }
void void
raise_compatible_typeerror(VALUE object, VALUE expected_class) raise_compatible_typeerror(VALUE object, VALUE expected_class)
{
raise_compatible_typeerror(object, rb_class2name(expected_class));
}
void
raise_compatible_typeerror(VALUE object, const char* expected_class_name)
{ {
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s or compatible object)", rb_raise(rb_eTypeError, "wrong argument type %s (expected %s or compatible object)",
rb_obj_classname(object), rb_class2name(expected_class)); rb_obj_classname(object), expected_class_name);
} }
/* /*

View file

@ -17,7 +17,9 @@
#define raise_cverror(e) cCvError::raise(e) #define raise_cverror(e) cCvError::raise(e)
void raise_typeerror(VALUE object, VALUE expected_class); void raise_typeerror(VALUE object, VALUE expected_class);
void raise_typeerror(VALUE object, const char* expected_class_name);
void raise_compatible_typeerror(VALUE object, VALUE expected_class); void raise_compatible_typeerror(VALUE object, VALUE expected_class);
void raise_compatible_typeerror(VALUE object, const char* expected_class_name);
void* rb_cvAlloc(size_t size); void* rb_cvAlloc(size_t size);
CvMat* rb_cvCreateMat(int height, int width, int type); CvMat* rb_cvCreateMat(int height, int width, int type);
IplImage* rb_cvCreateImage(CvSize size, int depth, int channels); IplImage* rb_cvCreateImage(CvSize size, int depth, int channels);

View file

@ -204,6 +204,21 @@ CVARR(VALUE object)
return ptr; return ptr;
} }
inline CvArr*
CVARR_WITH_CHECK(VALUE object)
{
Check_Type(object, T_DATA);
void *ptr = DATA_PTR(object);
if (CV_IS_IMAGE(ptr) || CV_IS_MAT(ptr) || CV_IS_SEQ(ptr) ||
CV_IS_MATND(ptr) || CV_IS_SPARSE_MAT(ptr)) {
return CVARR(object);
}
else {
raise_compatible_typeerror(object, (char*)"CvArr");
}
return NULL;
}
inline VALUE inline VALUE
OPENCV_OBJECT(VALUE klass, void *ptr) OPENCV_OBJECT(VALUE klass, void *ptr)
{ {