diff --git a/opencv.cc b/opencv.cc index f394a84..122493b 100644 --- a/opencv.cc +++ b/opencv.cc @@ -222,6 +222,7 @@ const zend_function_entry opencv_functions[] = { ZEND_NS_NAMED_FE(OPENCV_NS, bilateralFilter, ZEND_FN(opencv_bilateral_filter), opencv_bilateral_filter_arginfo) ZEND_NS_NAMED_FE(OPENCV_NS, dilate, ZEND_FN(opencv_dilate), opencv_dilate_arginfo) ZEND_NS_NAMED_FE(OPENCV_NS, erode, ZEND_FN(opencv_erode), opencv_erode_arginfo) + ZEND_NS_NAMED_FE(OPENCV_NS, getStructuringElement, ZEND_FN(opencv_get_structuring_element), opencv_get_structuring_element_arginfo) ZEND_NS_NAMED_FE(OPENCV_NS, threshold, ZEND_FN(opencv_threshold), opencv_threshold_arginfo) PHP_FE_END /* Must be the last line in opencv_functions[] */ }; diff --git a/source/opencv2/core/opencv_mat.cc b/source/opencv2/core/opencv_mat.cc index d62ded1..8044247 100644 --- a/source/opencv2/core/opencv_mat.cc +++ b/source/opencv2/core/opencv_mat.cc @@ -128,6 +128,24 @@ PHP_METHOD(opencv_mat, empty) RETURN_LONG(obj->mat->empty()); } +PHP_METHOD(opencv_mat, ones) +{ + long rows, cols, flags; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &rows, &cols, &flags) == FAILURE) { + RETURN_NULL(); + } + zval instance; + object_init_ex(&instance, opencv_mat_ce); + opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(&instance); + + Mat im = Mat::ones((int)rows, (int)cols, (int)flags); + + obj->mat=new Mat(im); + //update php Mat object property + opencv_mat_update_property_by_c_mat(&instance, obj->mat); + + RETURN_ZVAL(&instance,0,0); //return php Mat object +} PHP_METHOD(opencv_mat, zeros) { @@ -445,6 +463,7 @@ const zend_function_entry opencv_mat_methods[] = { PHP_ME(opencv_mat, print, NULL, ZEND_ACC_PUBLIC) PHP_ME(opencv_mat, size, NULL, ZEND_ACC_PUBLIC) PHP_ME(opencv_mat, clone, NULL, ZEND_ACC_PUBLIC) + PHP_ME(opencv_mat, ones, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME(opencv_mat, zeros, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_MALIAS(opencv_mat, zerosBySize ,zeros_by_size, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_MALIAS(opencv_mat, isContinuous ,is_continuous, NULL, ZEND_ACC_PUBLIC) diff --git a/source/opencv2/opencv_imgproc.cc b/source/opencv2/opencv_imgproc.cc index 19d8c1c..728f2e2 100644 --- a/source/opencv2/opencv_imgproc.cc +++ b/source/opencv2/opencv_imgproc.cc @@ -56,6 +56,7 @@ PHP_FUNCTION(opencv_cv_t_color){ RETURN_ZVAL(&instance,0,0); //return php Mat object } + /** * CV\ellipse * @param CV\Mat $img, Mat of original picture @@ -676,6 +677,42 @@ PHP_FUNCTION(opencv_threshold){ RETURN_DOUBLE(threshold(*src_object->mat, *dst_object->mat, thresh, maxval, (int)type)); } +/** + * CV\getStructuringElement + * @param execute_data + * @param return_value + */ +PHP_FUNCTION(opencv_get_structuring_element){ + long shape; + zval *ksize_zval, *anchor_zval = NULL; + Point anchor = Point(-1,-1); + opencv_mat_object *dst_object; + Mat dst; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lO|O", + &shape, + &ksize_zval, opencv_size_ce, + &anchor_zval, opencv_point_ce) == FAILURE) { + RETURN_NULL(); + } + + opencv_size_object *ksize_object = Z_PHP_SIZE_OBJ_P(ksize_zval); + if(anchor_zval != NULL){ + opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P(anchor_zval); + anchor = *anchor_object->point; + } + + dst = getStructuringElement((int)shape, *ksize_object->size, anchor); + + zval instance; + object_init_ex(&instance,opencv_mat_ce); + opencv_mat_object *dst_obj = Z_PHP_MAT_OBJ_P(&instance); + + dst_obj->mat=new Mat(dst); + opencv_mat_update_property_by_c_mat(&instance,dst_obj->mat); + + RETURN_ZVAL(&instance,0,0); //return php Mat object +} + /** * color conversion code in CV\cvtColor,opencv enum ColorConversionCodes * @param module_number @@ -940,4 +977,4 @@ void opencv_line_type_init(int module_number){ REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "LINE_4", LINE_4, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "LINE_8", LINE_8, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "LINE_AA", LINE_AA, CONST_CS | CONST_PERSISTENT); -} \ No newline at end of file +} diff --git a/source/opencv2/opencv_imgproc.h b/source/opencv2/opencv_imgproc.h index 303c070..a783d29 100644 --- a/source/opencv2/opencv_imgproc.h +++ b/source/opencv2/opencv_imgproc.h @@ -111,6 +111,13 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_erode_arginfo, 0, 0, 7) ZEND_END_ARG_INFO() PHP_FUNCTION(opencv_erode); +ZEND_BEGIN_ARG_INFO_EX(opencv_get_structuring_element_arginfo, 0, 0, 3) + ZEND_ARG_INFO(0, shape) + ZEND_ARG_INFO(0, ksize) + ZEND_ARG_INFO(0, anchor) +ZEND_END_ARG_INFO() +PHP_FUNCTION(opencv_get_structuring_element); + ZEND_BEGIN_ARG_INFO_EX(opencv_threshold_arginfo, 0, 0, 5) ZEND_ARG_INFO(0, src) ZEND_ARG_INFO(1, dst) diff --git a/tests/get_structuring_element.phpt b/tests/get_structuring_element.phpt new file mode 100644 index 0000000..5d4e0ec --- /dev/null +++ b/tests/get_structuring_element.phpt @@ -0,0 +1,33 @@ +--TEST-- +get_structuring_element function test +--SKIPIF-- + +--FILE-- +print(); + +--EXPECT-- +object(CV\Mat)#3 (4) { + ["type":"CV\Mat":private]=> + int(0) + ["rows"]=> + int(7) + ["cols"]=> + int(7) + ["dims"]=> + int(2) +} +[ 0, 0, 0, 1, 0, 0, 0; + 0, 1, 1, 1, 1, 1, 0; + 1, 1, 1, 1, 1, 1, 1; + 1, 1, 1, 1, 1, 1, 1; + 1, 1, 1, 1, 1, 1, 1; + 0, 1, 1, 1, 1, 1, 0; + 0, 0, 0, 1, 0, 0, 0] \ No newline at end of file diff --git a/tests/mat.phpt b/tests/mat.phpt index 393ae5b..6f70802 100644 --- a/tests/mat.phpt +++ b/tests/mat.phpt @@ -15,6 +15,9 @@ $mat->print(Formatter::FMT_PYTHON); $zeros = Mat::zeros(10,10,CV_8UC1); var_dump($zeros); $zeros->print(Formatter::FMT_PYTHON); +$ones = Mat::ones(10,10,CV_8UC1); +var_dump($ones); +$ones->print(Formatter::FMT_PYTHON); ?> --EXPECT-- object(CV\Mat)#2 (4) { @@ -51,4 +54,24 @@ object(CV\Mat)#3 (4) { [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] \ No newline at end of file + [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] +object(CV\Mat)#4 (4) { + ["type":"CV\Mat":private]=> + int(0) + ["rows"]=> + int(10) + ["cols"]=> + int(10) + ["dims"]=> + int(2) +} +[[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] \ No newline at end of file