@@ -118,28 +118,28 @@ PHP_FUNCTION(opencv_circle){
118118}
119119
120120/* *
121+ * todo 传入二维数组
121122 * CV\fillPoly
122123 * @param execute_data
123124 * @param return_value
124125 */
125126PHP_FUNCTION (opencv_fill_poly){
126127
127- // define parameters
128- long ncontours, lineType = LINE_8, shift = 0 ;
128+ long ncontours = 1 , lineType = LINE_8, shift = 0 ;
129129 zval *img_zval, *color_zval, *offset_point_zval = NULL ;
130130 zval *points_zval;
131131 opencv_point_object *offset_object;
132- if (zend_parse_parameters (ZEND_NUM_ARGS (), " OalO |llz" ,
132+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " OaO |llz" ,
133133 &img_zval, opencv_mat_ce,
134- &points_zval, &ncontours,
134+ &points_zval,
135135 &color_zval, opencv_scalar_ce,
136136 &lineType, &shift,
137137 &offset_point_zval) == FAILURE) {
138138 RETURN_NULL ();
139139 }
140140
141141 unsigned long point_count = zend_hash_num_elements (Z_ARRVAL_P (points_zval));
142- Point root_points[1 ][point_count];
142+ Point root_points[ncontours ][point_count];
143143 opencv_point_object *point_object;
144144 zend_ulong _h;
145145 zval *array_val_zval;
@@ -157,7 +157,7 @@ PHP_FUNCTION(opencv_fill_poly){
157157 }
158158 }ZEND_HASH_FOREACH_END ();
159159
160- const Point* pts[1 ] = {root_points[0 ]};
160+ const Point* pts[ncontours ] = {root_points[0 ]};
161161 int npts[] = {(int )point_count};
162162 Point offset;
163163 zval *offset_point_real_zval;
@@ -547,6 +547,102 @@ PHP_FUNCTION(opencv_bilateral_filter){
547547}
548548
549549
550+ PHP_FUNCTION (opencv_dilate){
551+ zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL , *border_value_zval = NULL ;
552+ long iterations = 1 , border_type = BORDER_CONSTANT;
553+
554+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " OzO|OllO" ,
555+ &src_zval, opencv_mat_ce,
556+ &dst_zval,
557+ &kernel_zval, opencv_mat_ce,
558+ &anchor_zval, opencv_point_ce,
559+ &iterations, &border_type,
560+ &border_value_zval, opencv_scalar_ce) == FAILURE) {
561+ RETURN_NULL ();
562+ }
563+ opencv_mat_object *src_object, *dst_object, *kernel_object;
564+ Point anchor = Point (-1 ,-1 );
565+ Scalar border_value = morphologyDefaultBorderValue ();
566+
567+ src_object = Z_PHP_MAT_OBJ_P (src_zval);
568+ kernel_object = Z_PHP_MAT_OBJ_P (kernel_zval);
569+ zval *dst_real_zval = Z_REFVAL_P (dst_zval);
570+
571+ if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval) == opencv_mat_ce){
572+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
573+ } else {
574+ zval_ptr_dtor (dst_real_zval);
575+ zval instance;
576+ Mat dst;
577+ object_init_ex (&instance,opencv_mat_ce);
578+ ZVAL_COPY_VALUE (dst_real_zval, &instance);
579+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
580+ dst_object->mat = new Mat (dst);
581+ }
582+
583+ if (anchor_zval != NULL ){
584+ opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P (anchor_zval);
585+ anchor = *anchor_object->point ;
586+ }
587+
588+ if (border_value_zval != NULL ){
589+ opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P (border_value_zval);
590+ border_value = *border_value_object->scalar ;
591+ }
592+
593+ dilate (*src_object->mat , *dst_object->mat , *kernel_object->mat , anchor, (int )iterations, (int )border_type, border_value);
594+ RETURN_NULL ();
595+
596+ }
597+
598+ PHP_FUNCTION (opencv_erode){
599+
600+ zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL , *border_value_zval = NULL ;
601+ long iterations = 1 , border_type = BORDER_CONSTANT;
602+
603+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " OzO|OllO" ,
604+ &src_zval, opencv_mat_ce,
605+ &dst_zval,
606+ &kernel_zval, opencv_mat_ce,
607+ &anchor_zval, opencv_point_ce,
608+ &iterations, &border_type,
609+ &border_value_zval, opencv_scalar_ce) == FAILURE) {
610+ RETURN_NULL ();
611+ }
612+ opencv_mat_object *src_object, *dst_object, *kernel_object;
613+ Point anchor = Point (-1 ,-1 );
614+ Scalar border_value = morphologyDefaultBorderValue ();
615+
616+ src_object = Z_PHP_MAT_OBJ_P (src_zval);
617+ kernel_object = Z_PHP_MAT_OBJ_P (kernel_zval);
618+ zval *dst_real_zval = Z_REFVAL_P (dst_zval);
619+
620+ if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval) == opencv_mat_ce){
621+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
622+ } else {
623+ zval_ptr_dtor (dst_real_zval);
624+ zval instance;
625+ Mat dst;
626+ object_init_ex (&instance,opencv_mat_ce);
627+ ZVAL_COPY_VALUE (dst_real_zval, &instance);
628+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
629+ dst_object->mat = new Mat (dst);
630+ }
631+
632+ if (anchor_zval != NULL ){
633+ opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P (anchor_zval);
634+ anchor = *anchor_object->point ;
635+ }
636+
637+ if (border_value_zval != NULL ){
638+ opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P (border_value_zval);
639+ border_value = *border_value_object->scalar ;
640+ }
641+
642+ erode (*src_object->mat , *dst_object->mat , *kernel_object->mat , anchor, (int )iterations, (int )border_type, border_value);
643+ RETURN_NULL ();
644+ }
645+
550646/* *
551647 * color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
552648 * @param module_number
0 commit comments