From 63666f47f1091dadf0ec4c7437b1c22863c3970c Mon Sep 17 00:00:00 2001 From: ser1zw Date: Sat, 28 May 2011 20:17:22 +0900 Subject: [PATCH] modified some methods of CvMat to adapt them to IplImage --- ext/opencv/cvmat.cpp | 96 ++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 43 deletions(-) diff --git a/ext/opencv/cvmat.cpp b/ext/opencv/cvmat.cpp index 9d4c1c2..ca9f47e 100644 --- a/ext/opencv/cvmat.cpp +++ b/ext/opencv/cvmat.cpp @@ -707,10 +707,10 @@ rb_copy(int argc, VALUE *argv, VALUE self) { VALUE value, copied; CvMat *src = CVMAT(self); + CvSize size = cvGetSize(src); rb_scan_args(argc, argv, "01", &value); if (argc == 0) { - CvSize size = cvGetSize(src); - copied = new_object(cvGetSize(src), cvGetElemType(src)); + copied = new_mat_kind_object(size, self); cvCopy(src, CVMAT(copied)); return copied; } @@ -724,7 +724,7 @@ rb_copy(int argc, VALUE *argv, VALUE self) if (n > 0) { copied = rb_ary_new2(n); for (int i = 0; i < n; i++) { - VALUE tmp = new_object(src->rows, src->cols, cvGetElemType(src)); + VALUE tmp = new_mat_kind_object(size, self); cvCopy(src, CVMAT(tmp)); rb_ary_store(copied, i, tmp); } @@ -1581,6 +1581,7 @@ rb_merge(VALUE klass, VALUE args) }else rb_raise(rb_eTypeError, "argument should be CvMat or subclass of it."); } + // TODO: adapt IplImage dest = new_object(cvGetSize(tmp), CV_MAKETYPE(CV_MAT_DEPTH(tmp->type), len)); cvMerge(src[0], src[1], src[2], src[3], CVARR(dest)); return dest; @@ -1673,6 +1674,7 @@ rb_convert_scale(VALUE self, VALUE hash) VALUE depth = rb_hash_aref(hash, ID2SYM(rb_intern("depth"))), scale = rb_hash_aref(hash, ID2SYM(rb_intern("scale"))), shift = rb_hash_aref(hash, ID2SYM(rb_intern("shift"))), + // TODO: adapt IplImage dest = new_object(cvGetSize(CVARR(self)), CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_MAT_DEPTH(CVMAT(self)->type)), CV_MAT_CN(CVMAT(self)->type))); cvConvertScale(CVARR(self), CVARR(dest), IF_DBL(scale, 1.0), IF_DBL(shift, 0.0)); return dest; @@ -1694,6 +1696,7 @@ rb_convert_scale_abs(VALUE self, VALUE hash) VALUE scale = rb_hash_aref(hash, ID2SYM(rb_intern("scale"))), shift = rb_hash_aref(hash, ID2SYM(rb_intern("shift"))), + // TODO: adapt IplImage dest = new_object(cvGetSize(CVARR(self)), CV_MAKETYPE(CV_8U, CV_MAT_CN(CVMAT(self)->type))); cvConvertScaleAbs(CVARR(self), CVARR(dest), IF_DBL(scale, 1.0), IF_DBL(shift, 0.0)); return dest; @@ -1766,7 +1769,7 @@ rb_mul(int argc, VALUE *argv, VALUE self) VALUE val, scale, dest; if (rb_scan_args(argc, argv, "11", &val, &scale) < 2) scale = rb_float_new(1.0); - dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); if (rb_obj_is_kind_of(val, rb_klass)) { cvMul(CVARR(self), CVARR(val), CVARR(dest), NUM2DBL(scale)); }else{ @@ -1792,7 +1795,7 @@ rb_mat_mul(int argc, VALUE *argv, VALUE self) { VALUE val, shiftvec, dest; rb_scan_args(argc, argv, "11", &val, &shiftvec); - dest = new_object(CVMAT(self)->rows, CVMAT(val)->cols, cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); if (NIL_P(shiftvec)) cvMatMul(CVARR(self), CVARR(val), CVARR(dest)); else @@ -1816,12 +1819,12 @@ rb_div(int argc, VALUE *argv, VALUE self) VALUE val, scale, dest; if (rb_scan_args(argc, argv, "11", &val, &scale) < 2) scale = rb_float_new(1.0); - dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); if (rb_obj_is_kind_of(val, rb_klass)) { cvDiv(CVARR(self), CVARR(val), CVARR(dest), NUM2DBL(scale)); }else{ CvScalar scl = VALUE_TO_CVSCALAR(val); - VALUE mat = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE mat = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvSet(CVARR(mat), scl); cvDiv(CVARR(self), CVARR(mat), CVARR(dest), NUM2DBL(scale)); } @@ -1928,6 +1931,7 @@ rb_not_bang(VALUE self) VALUE rb_cmp_internal(VALUE self, VALUE val, int operand) { + // TODO: adapt IplImage VALUE dest = new_object(cvGetSize(CVARR(self)), CV_8U); if (rb_obj_is_kind_of(val, rb_klass)) cvCmp(CVARR(self), CVARR(val), CVARR(dest), operand); @@ -2031,7 +2035,7 @@ rb_ne(VALUE self, VALUE val) VALUE rb_in_range(VALUE self, VALUE min, VALUE max) { - VALUE dest = dest = new_object(cvGetSize(CVARR(self)), CV_8UC1), tmp; + VALUE dest = new_object(cvGetSize(CVARR(self)), CV_8UC1), tmp; if (rb_obj_is_kind_of(min, rb_klass) && rb_obj_is_kind_of(max, rb_klass)) { cvInRange(CVARR(self), CVARR(min), CVARR(max), CVARR(dest)); }else if (rb_obj_is_kind_of(min, rb_klass)) { @@ -2058,7 +2062,7 @@ rb_in_range(VALUE self, VALUE min, VALUE max) VALUE rb_abs_diff(VALUE self, VALUE val) { - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); if (rb_obj_is_kind_of(val, rb_klass)) { cvAbsDiff(CVARR(self), CVARR(val), CVARR(dest)); }else{ @@ -2200,7 +2204,7 @@ rb_cross_product(VALUE self, VALUE mat) { if (!rb_obj_is_kind_of(mat, rb_klass)) rb_raise(rb_eTypeError, "argument should be CvMat."); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvCrossProduct(CVARR(self), CVARR(mat), CVARR(dest)); return dest; } @@ -2217,7 +2221,7 @@ rb_transform(int argc, VALUE *argv, VALUE self) { VALUE transmat, shiftvec; rb_scan_args(argc, argv, "11", &transmat, &shiftvec); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); if (NIL_P(shiftvec)) cvTransform(CVARR(self), CVARR(dest), CVMAT(transmat), NULL); else @@ -2243,7 +2247,7 @@ rb_transform(int argc, VALUE *argv, VALUE self) VALUE rb_perspective_transform(VALUE self, VALUE mat) { - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvPerspectiveTransform(CVARR(self), CVARR(dest), CVMAT(mat)); return dest; } @@ -2300,8 +2304,7 @@ rb_trace(VALUE self) VALUE rb_transpose(VALUE self) { - CvSize size = cvGetSize(CVARR(self)); - VALUE dest = new_object(size.width, size.height, cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvTranspose(CVARR(self), CVARR(dest)); return dest; } @@ -2358,7 +2361,7 @@ rb_invert(int argc, VALUE *argv, VALUE self) VALUE symbol; rb_scan_args(argc, argv, "01", &symbol); int method = CVMETHOD("INVERSION_METHOD", symbol, CV_LU); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvInvert(CVARR(self), CVARR(dest), method); return dest; } @@ -2387,7 +2390,7 @@ rb_solve(int argc, VALUE *argv, VALUE self) rb_scan_args(argc, argv, "11", &mat, &symbol); if (!rb_obj_is_kind_of(mat, rb_klass)) rb_raise(rb_eTypeError, "argument 1 (right-hand part of the linear system) should be %s.)", rb_class2name(rb_klass)); - VALUE dest = new_object(CVMAT(self)->rows, CVMAT(mat)->cols, cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(mat)), self); cvSolve(CVARR(self), CVARR(mat), CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU)); return dest; } @@ -2516,7 +2519,7 @@ rb_dft(int argc, VALUE *argv, VALUE self) type |= CVMETHOD("DXT_FLAG", argv[i]); } } - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvDFT(CVARR(self), CVARR(dest), type, num_rows); return dest; } @@ -2544,7 +2547,7 @@ rb_dct(int argc, VALUE *argv, VALUE self) type |= CVMETHOD("DXT_FLAG", argv[i]); } } - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvDCT(CVARR(self), CVARR(dest), type); return dest; } @@ -3058,6 +3061,7 @@ rb_sobel(int argc, VALUE *argv, VALUE self) aperture_size = INT2FIX(3); switch(CV_MAT_DEPTH(CVMAT(self)->type)) { case CV_8U: + // TODO: adapt IplImage dest = new_object(cvGetSize(CVARR(self)), CV_MAKETYPE(CV_16S, 1)); break; case CV_32F: @@ -3085,6 +3089,7 @@ rb_laplace(int argc, VALUE *argv, VALUE self) aperture_size = INT2FIX(3); switch(CV_MAT_DEPTH(CVMAT(self)->type)) { case CV_8U: + // TODO: adapt IplImage dest = new_object(cvGetSize(CVARR(self)), CV_MAKETYPE(CV_16S, 1)); break; case CV_32F: @@ -3109,7 +3114,7 @@ rb_canny(int argc, VALUE *argv, VALUE self) VALUE thresh1, thresh2, aperture_size; if (rb_scan_args(argc, argv, "21", &thresh1, &thresh2, &aperture_size) < 3) aperture_size = INT2FIX(3); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvCanny(CVARR(self), CVARR(dest), NUM2INT(thresh1), NUM2INT(thresh2), NUM2INT(aperture_size)); return dest; } @@ -3377,7 +3382,7 @@ rb_resize(int argc, VALUE *argv, VALUE self) { VALUE size, interpolation; rb_scan_args(argc, argv, "11", &size, &interpolation); - VALUE dest = new_object(VALUE_TO_CVSIZE(size), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(VALUE_TO_CVSIZE(size), self); cvResize(CVARR(self), CVARR(dest), CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR)); return dest; } @@ -3396,7 +3401,7 @@ rb_warp_affine(int argc, VALUE *argv, VALUE self) fill_value = INT2FIX(0); if (!rb_obj_is_kind_of(map_matrix, cCvMat::rb_class())) rb_raise(rb_eTypeError, "argument 1 (map matrix) should be %s (2x3).", rb_class2name(cCvMat::rb_class())); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvWarpAffine(CVARR(self), CVARR(dest), CVMAT(map_matrix), CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR) | CVMETHOD("WARP_FLAG", option, CV_WARP_FILL_OUTLIERS), VALUE_TO_CVSCALAR(fill_value)); return dest; @@ -3479,9 +3484,10 @@ rb_warp_perspective(int argc, VALUE *argv, VALUE self) fillval = INT2FIX(0); if (!rb_obj_is_kind_of(map_matrix, cCvMat::rb_class())) rb_raise(rb_eTypeError, "argument 1 (map matrix) should be %s (3x3).", rb_class2name(cCvMat::rb_class())); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvWarpPerspective(CVARR(self), CVARR(dest), CVMAT(map_matrix), - CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR) | CVMETHOD("WARP_FLAG",option, CV_WARP_FILL_OUTLIERS), VALUE_TO_CVSCALAR(fillval)); + CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR) + | CVMETHOD("WARP_FLAG",option, CV_WARP_FILL_OUTLIERS), VALUE_TO_CVSCALAR(fillval)); return dest; } @@ -3505,7 +3511,7 @@ rb_remap(int argc, VALUE *argv, VALUE self) rb_raise(rb_eTypeError, "argument 1 (map of x-coordinates) should be %s(CV_32F and single-channel).", rb_class2name(cCvMat::rb_class())); if (!rb_obj_is_kind_of(mapy, cCvMat::rb_class())) rb_raise(rb_eTypeError, "argument 2 (map of y-coordinates) should be %s(CV_32F and single-channel).", rb_class2name(cCvMat::rb_class())); - VALUE dest = new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvRemap(CVARR(self), CVARR(dest), CVARR(mapx), CVARR(mapy), CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR) | CVMETHOD("WARP_FLAG", option, CV_WARP_FILL_OUTLIERS), VALUE_TO_CVSCALAR(fillval)); return dest; @@ -3599,7 +3605,7 @@ rb_morphology_internal(VALUE element, VALUE iteration, int operation, VALUE self { CvArr* self_ptr = CVARR(self); CvSize size = cvGetSize(self_ptr); - VALUE dest = new_object(size, cvGetElemType(self_ptr)); + VALUE dest = new_mat_kind_object(size, self); if (operation == CV_MOP_GRADIENT) { 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)); @@ -3764,6 +3770,7 @@ rb_smooth_blur_no_scale(int argc, VALUE *argv, VALUE self) default: rb_raise(rb_eNotImpError, "unsupport format. (support 8bit unsigned/signed or 32bit floating point only)"); } + // TODO: adapt IplImage dest = new_object(cvGetSize(CVARR(self)), dest_type); cvSmooth(CVARR(self), CVARR(dest), CV_BLUR_NO_SCALE, IF_INT(p1, 3), IF_INT(p2, 3)); return dest; @@ -3782,7 +3789,7 @@ rb_smooth_blur(int argc, VALUE *argv, VALUE self) SUPPORT_C1C3_ONLY(self); VALUE p1, p2, dest; rb_scan_args(argc, argv, "02", &p1, &p2); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvSmooth(CVARR(self), CVARR(dest), CV_BLUR, IF_INT(p1, 3), IF_INT(p2, 3)); return dest; } @@ -3808,7 +3815,7 @@ rb_smooth_gaussian(int argc, VALUE *argv, VALUE self) SUPPORT_C1C3_ONLY(self); VALUE p1, p2, p3, p4, dest; rb_scan_args(argc, argv, "04", &p1, &p2, &p3, &p4); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvSmooth(CVARR(self), CVARR(dest), CV_GAUSSIAN, IF_INT(p1, 3), IF_INT(p2, 3), IF_DBL(p3, 0.0), IF_DBL(p4, 0.0)); return dest; } @@ -3827,7 +3834,7 @@ rb_smooth_median(int argc, VALUE *argv, VALUE self) SUPPORT_C1C3_ONLY(self); VALUE p1, dest; rb_scan_args(argc, argv, "01", &p1); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvSmooth(CVARR(self), CVARR(dest), CV_MEDIAN, IF_INT(p1, 3)); return dest; } @@ -3846,7 +3853,7 @@ rb_smooth_bilateral(int argc, VALUE *argv, VALUE self) SUPPORT_C1C3_ONLY(self); VALUE p1, p2, dest; rb_scan_args(argc, argv, "02", &p1, &p2); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvSmooth(CVARR(self), CVARR(dest), CV_BILATERAL, IF_INT(p1, 3), IF_INT(p2, 3)); return dest; } @@ -3868,7 +3875,7 @@ rb_filter2d(int argc, VALUE *argv, VALUE self) if (!rb_obj_is_kind_of(kernel, cCvMat::rb_class())) rb_raise(rb_eTypeError, "argument 1 (kernel) should be %s.", rb_class2name(cCvMat::rb_class())); int type = cvGetElemType(CVARR(kernel)); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvFilter2D(CVARR(self), CVARR(dest), CVMAT(kernel), NIL_P(anchor) ? cvPoint(-1,-1) : VALUE_TO_CVPOINT(anchor)); return dest; } @@ -3885,7 +3892,7 @@ rb_copy_make_border_constant(int argc, VALUE *argv, VALUE self) { VALUE size, offset, value, dest; rb_scan_args(argc, argv, "21", &size, &offset, &value); - dest = cCvMat::new_object(VALUE_TO_CVSIZE(size), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(VALUE_TO_CVSIZE(size), self); cvCopyMakeBorder(CVARR(self), CVARR(dest), VALUE_TO_CVPOINT(offset), IPL_BORDER_CONSTANT, NIL_P(value) ? cvScalar(0) : VALUE_TO_CVSCALAR(value)); return dest; } @@ -3903,7 +3910,7 @@ rb_copy_make_border_replicate(int argc, VALUE *argv, VALUE self) { VALUE size, offset, dest; rb_scan_args(argc, argv, "20", &size, &offset); - dest = cCvMat::new_object(VALUE_TO_CVSIZE(size), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(VALUE_TO_CVSIZE(size), self); cvCopyMakeBorder(CVARR(self), CVARR(dest), VALUE_TO_CVPOINT(offset), IPL_BORDER_REPLICATE); return dest; } @@ -3932,7 +3939,8 @@ rb_integral(int argc, VALUE *argv, VALUE self) sum = cCvMat::new_object(size, CV_MAKETYPE(CV_64F, cn)); sqsum = (sqsum == Qtrue ? cCvMat::new_object(size, CV_MAKETYPE(CV_64F, cn)) : Qnil); tilted_sum = (tilted_sum == Qtrue ? cCvMat::new_object(size, CV_MAKETYPE(CV_64F, cn)) : Qnil); - cvIntegral(CVARR(self), CVARR(sum), NIL_P(sqsum) ? NULL : CVARR(sqsum), NIL_P(tilted_sum) ? NULL : CVARR(tilted_sum)); + cvIntegral(CVARR(self), CVARR(sum), NIL_P(sqsum) ? NULL : CVARR(sqsum), + NIL_P(tilted_sum) ? NULL : CVARR(tilted_sum)); dest = rb_ary_new3(1, sum); if(sqsum) rb_ary_push(dest, sqsum); @@ -3945,7 +3953,7 @@ VALUE rb_threshold_internal(int threshold_type, VALUE threshold, VALUE max_value, VALUE use_otsu, VALUE self) { CvArr* self_ptr = CVARR(self); - VALUE dest = cCvMat::new_object(cvGetSize(self_ptr), cvGetElemType(self_ptr)); + VALUE dest = new_mat_kind_object(cvGetSize(self_ptr), self); int otsu = (use_otsu == Qtrue) && ((threshold_type & CV_THRESH_OTSU) == 0); int type = threshold_type | (otsu ? CV_THRESH_OTSU : 0); double otsu_threshold = cvThreshold(self_ptr, CVARR(dest), NUM2DBL(threshold), NUM2DBL(max_value), type); @@ -4087,8 +4095,9 @@ rb_pyr_down(int argc, VALUE *argv, VALUE self) rb_raise(rb_eArgError, "argument 1 (filter_type) should be Symbol."); } } - CvSize size = cvGetSize(CVARR(self)); - dest = cCvMat::new_object(size.height / 2, size.width / 2, cvGetElemType(CVARR(self))); + CvSize original_size = cvGetSize(CVARR(self)); + CvSize size = { original_size.width >> 1, original_size.height >> 1 }; + dest = new_mat_kind_object(size, self); cvPyrDown(CVARR(self), CVARR(dest), filter); return dest; } @@ -4120,8 +4129,9 @@ rb_pyr_up(int argc, VALUE *argv, VALUE self) rb_raise(rb_eArgError, "argument 1 (filter_type) should be Symbol."); } } - CvSize size = cvGetSize(CVARR(self)); - dest = cCvMat::new_object(size.height * 2, size.width * 2, cvGetElemType(CVARR(self))); + CvSize original_size = cvGetSize(CVARR(self)); + CvSize size = { original_size.width << 1, original_size.height << 1 }; + dest = new_mat_kind_object(size, self); cvPyrUp(CVARR(self), CVARR(dest), filter); return dest; } @@ -4375,7 +4385,7 @@ rb_pyr_mean_shift_filtering(int argc, VALUE *argv, VALUE self) { VALUE spatial_window_radius, color_window_radius, max_level, termcrit, dest; rb_scan_args(argc, argv, "22", &spatial_window_radius, &color_window_radius, &max_level, &termcrit); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvPyrMeanShiftFiltering(CVARR(self), CVARR(dest), NUM2DBL(spatial_window_radius), NUM2DBL(color_window_radius), @@ -4594,7 +4604,7 @@ rb_inpaint(VALUE self, VALUE inpaint_method, VALUE mask, VALUE radius) int method = CVMETHOD("INPAINT_METHOD", inpaint_method, INVALID_TYPE); if (!(rb_obj_is_kind_of(mask, cCvMat::rb_class())) || cvGetElemType(CVARR(mask)) != CV_8UC1) rb_raise(rb_eTypeError, "argument 1 (mask) should be mask image."); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvInpaint(CVARR(self), CVARR(mask), CVARR(dest), NUM2DBL(radius), method); return dest; } @@ -4615,7 +4625,7 @@ rb_inpaint_ns(VALUE self, VALUE mask, VALUE radius) VALUE dest; if (!(rb_obj_is_kind_of(mask, cCvMat::rb_class())) || cvGetElemType(CVARR(mask)) != CV_8UC1) rb_raise(rb_eTypeError, "argument 1 (mask) should be mask image."); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvInpaint(CVARR(self), CVARR(mask), CVARR(dest), NUM2DBL(radius), CV_INPAINT_NS); return dest; } @@ -4635,7 +4645,7 @@ rb_inpaint_telea(VALUE self, VALUE mask, VALUE radius) VALUE dest; if (!(rb_obj_is_kind_of(mask, cCvMat::rb_class())) || cvGetElemType(CVARR(mask)) != CV_8UC1) rb_raise(rb_eTypeError, "argument 1 (mask) should be mask image."); - dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvInpaint(CVARR(self), CVARR(mask), CVARR(dest), NUM2DBL(radius), CV_INPAINT_TELEA); return dest; } @@ -4660,7 +4670,7 @@ VALUE rb_equalize_hist(VALUE self) { SUPPORT_8UC1_ONLY(self); - VALUE dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self))); + VALUE dest = new_mat_kind_object(cvGetSize(CVARR(self)), self); cvEqualizeHist(CVARR(self), CVARR(dest)); return dest; }