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
rb_repeat(VALUE self, VALUE object)
{
CvMat* obj_ptr = CVMAT_WITH_CHECK(object);
try {
cvRepeat(CVARR(self), obj_ptr);
cvRepeat(CVARR(self), CVARR_WITH_CHECK(object));
}
catch (cv::Exception& e) {
raise_cverror(e);
@ -1710,7 +1709,7 @@ rb_lut(VALUE self, VALUE lut)
{
VALUE dest = copy(self);
try {
cvLUT(CVARR(self), CVARR(dest), CVMAT_WITH_CHECK(lut));
cvLUT(CVARR(self), CVARR(dest), CVARR_WITH_CHECK(lut));
}
catch (cv::Exception& 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);
try {
if (NIL_P(shiftvec))
cvMatMul(self_ptr, CVMAT_WITH_CHECK(val), CVARR(dest));
cvMatMul(self_ptr, CVARR_WITH_CHECK(val), CVARR(dest));
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) {
raise_cverror(e);
@ -2354,7 +2353,7 @@ rb_dot_product(VALUE self, VALUE mat)
{
double result = 0.0;
try {
result = cvDotProduct(CVARR(self), CVMAT_WITH_CHECK(mat));
result = cvDotProduct(CVARR(self), CVARR_WITH_CHECK(mat));
}
catch (cv::Exception& e) {
raise_cverror(e);
@ -2376,7 +2375,7 @@ rb_cross_product(VALUE self, VALUE mat)
VALUE dest = Qnil;
try {
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) {
raise_cverror(e);
@ -2473,7 +2472,7 @@ rb_mul_transposed(int argc, VALUE *argv, VALUE self)
_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);
int order = NIL_P(_order) ? 0 : NUM2INT(_order);
CvArr* self_ptr = CVARR(self);
@ -2607,10 +2606,10 @@ rb_solve(int argc, VALUE *argv, VALUE self)
VALUE mat, symbol;
rb_scan_args(argc, argv, "11", &mat, &symbol);
VALUE dest = Qnil;
CvMat* mat_ptr = CVMAT_WITH_CHECK(mat);
CvArr* arr_ptr = CVARR_WITH_CHECK(mat);
try {
dest = new_mat_kind_object(cvGetSize(mat_ptr), self);
cvSolve(CVARR(self), mat_ptr, CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU));
dest = new_mat_kind_object(cvGetSize(arr_ptr), self);
cvSolve(CVARR(self), arr_ptr, CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU));
}
catch (cv::Exception& e) {
raise_cverror(e);
@ -3913,7 +3912,7 @@ rb_remap(int argc, VALUE *argv, VALUE self)
VALUE dest = Qnil;
try {
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("WARP_FLAG", option, CV_WARP_FILL_OUTLIERS),
VALUE_TO_CVSCALAR(fillval));
@ -4741,7 +4740,7 @@ VALUE
rb_watershed(VALUE self, VALUE markers)
{
try {
cvWatershed(CVARR(self), CVMAT_WITH_CHECK(markers));
cvWatershed(CVARR(self), CVARR_WITH_CHECK(markers));
}
catch (cv::Exception& e) {
raise_cverror(e);
@ -4960,7 +4959,7 @@ rb_match_template(int argc, VALUE *argv, VALUE self)
method_flag = CVMETHOD("MATCH_TEMPLATE_METHOD", method);
CvArr* self_ptr = CVARR(self);
CvMat* templ_ptr = CVMAT_WITH_CHECK(templ);
CvArr* templ_ptr = CVARR_WITH_CHECK(templ);
VALUE result = Qnil;
try {
CvSize src_size = cvGetSize(self_ptr);

View file

@ -11,16 +11,28 @@
void
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_obj_classname(object), rb_class2name(expected_class));
rb_obj_classname(object), expected_class_name);
}
void
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_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)
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, const char* expected_class_name);
void* rb_cvAlloc(size_t size);
CvMat* rb_cvCreateMat(int height, int width, int type);
IplImage* rb_cvCreateImage(CvSize size, int depth, int channels);

View file

@ -204,6 +204,21 @@ CVARR(VALUE object)
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
OPENCV_OBJECT(VALUE klass, void *ptr)
{