@@ -933,6 +933,55 @@ PHP_FUNCTION(opencv_get_structuring_element){
933933 RETURN_ZVAL (&instance,0 ,0 ); // return php Mat object
934934}
935935
936+
937+ PHP_FUNCTION (opencv_morphology_ex){
938+
939+ zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL , *border_value_zval = NULL ;
940+ long op, iterations = 1 , border_type = BORDER_CONSTANT;
941+
942+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " OzlO|OllO" ,
943+ &src_zval, opencv_mat_ce,
944+ &dst_zval,
945+ &op,
946+ &kernel_zval, opencv_mat_ce,
947+ &anchor_zval, opencv_point_ce,
948+ &iterations, &border_type,
949+ &border_value_zval, opencv_scalar_ce) == FAILURE) {
950+ RETURN_NULL ();
951+ }
952+ opencv_mat_object *src_object, *dst_object, *kernel_object;
953+ Point anchor = Point (-1 ,-1 );
954+ Scalar border_value = morphologyDefaultBorderValue ();
955+
956+ src_object = Z_PHP_MAT_OBJ_P (src_zval);
957+ kernel_object = Z_PHP_MAT_OBJ_P (kernel_zval);
958+ zval *dst_real_zval = Z_REFVAL_P (dst_zval);
959+
960+ if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval) == opencv_mat_ce){
961+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
962+ } else {
963+ zval_ptr_dtor (dst_real_zval);
964+ zval instance;
965+ Mat dst;
966+ object_init_ex (&instance,opencv_mat_ce);
967+ ZVAL_COPY_VALUE (dst_real_zval, &instance);
968+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
969+ dst_object->mat = new Mat (dst);
970+ }
971+
972+ if (anchor_zval != NULL ){
973+ opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P (anchor_zval);
974+ anchor = *anchor_object->point ;
975+ }
976+
977+ if (border_value_zval != NULL ){
978+ opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P (border_value_zval);
979+ border_value = *border_value_object->scalar ;
980+ }
981+ morphologyEx (*src_object->mat , *dst_object->mat , int (op), *kernel_object->mat , anchor, (int )iterations, (int )border_type, border_value);
982+ RETURN_NULL ();
983+ }
984+
936985/* *
937986 * color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
938987 * @param module_number
0 commit comments