@@ -677,6 +677,54 @@ PHP_FUNCTION(opencv_threshold){
677677 RETURN_DOUBLE (threshold (*src_object->mat , *dst_object->mat , thresh, maxval, (int )type));
678678}
679679
680+ /* *
681+ * CV\filter2D
682+ * @param execute_data
683+ * @param return_value
684+ */
685+ PHP_FUNCTION (opencv_filter2D){
686+
687+ zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL ;
688+ long ddepth;
689+ Point anchor = Point (-1 ,-1 );
690+ double delta = 0.0 ;
691+ long border_type = BORDER_DEFAULT;
692+ opencv_mat_object *dst_object;
693+
694+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " OzlO|Odl" ,
695+ &src_zval, opencv_mat_ce,
696+ &dst_zval,
697+ &ddepth,
698+ &kernel_zval, opencv_mat_ce,
699+ &anchor_zval, opencv_point_ce,
700+ &delta,
701+ &border_type) == FAILURE) {
702+ RETURN_NULL ();
703+ }
704+
705+ opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P (src_zval);
706+ opencv_mat_object *kernel_object = Z_PHP_MAT_OBJ_P (kernel_zval);
707+ if (anchor_zval != NULL ){
708+ opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P (anchor_zval);
709+ anchor = *anchor_object->point ;
710+ }
711+
712+ zval *dst_real_zval = Z_REFVAL_P (dst_zval);
713+ if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval) == opencv_mat_ce){
714+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
715+ } else {
716+ zval_ptr_dtor (dst_real_zval);
717+ zval instance;
718+ Mat dst;
719+ object_init_ex (&instance,opencv_mat_ce);
720+ ZVAL_COPY_VALUE (dst_real_zval, &instance);
721+ dst_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
722+ dst_object->mat = new Mat (dst);
723+ }
724+ filter2D (*src_object->mat , *dst_object->mat , (int )ddepth, *kernel_object->mat , anchor, delta, (int )border_type);
725+ RETURN_NULL ();
726+ }
727+
680728/* *
681729 * CV\getStructuringElement
682730 * @param execute_data
0 commit comments