Skip to content

Commit 9e89bb3

Browse files
committed
CV\morphologyEx
1 parent 833badf commit 9e89bb3

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

opencv.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ const zend_function_entry opencv_functions[] = {
229229
ZEND_NS_NAMED_FE(OPENCV_NS, convertScaleAbs, ZEND_FN(opencv_convert_scale_abs), opencv_convert_scale_abs_arginfo)
230230
ZEND_NS_NAMED_FE(OPENCV_NS, getStructuringElement, ZEND_FN(opencv_get_structuring_element), opencv_get_structuring_element_arginfo)
231231
ZEND_NS_NAMED_FE(OPENCV_NS, threshold, ZEND_FN(opencv_threshold), opencv_threshold_arginfo)
232+
ZEND_NS_NAMED_FE(OPENCV_NS, morphologyEx, ZEND_FN(opencv_morphology_ex), opencv_morphology_ex_arginfo)
232233
PHP_FE_END /* Must be the last line in opencv_functions[] */
233234
};
234235
/* }}} */

source/opencv2/opencv_imgproc.cc

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

source/opencv2/opencv_imgproc.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,16 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_threshold_arginfo, 0, 0, 5)
182182
ZEND_END_ARG_INFO()
183183
PHP_FUNCTION(opencv_threshold);
184184

185+
ZEND_BEGIN_ARG_INFO_EX(opencv_morphology_ex_arginfo, 0, 0, 8)
186+
ZEND_ARG_INFO(0, src)
187+
ZEND_ARG_INFO(1, dst)
188+
ZEND_ARG_INFO(0, op)
189+
ZEND_ARG_INFO(0, kernel)
190+
ZEND_ARG_INFO(0, anchor)
191+
ZEND_ARG_INFO(0, iterations)
192+
ZEND_ARG_INFO(0, borderType)
193+
ZEND_ARG_INFO(0, borderValue)
194+
ZEND_END_ARG_INFO()
195+
PHP_FUNCTION(opencv_morphology_ex);
196+
185197
#endif //OPENCV_OPENCV_IMGPROC_H

0 commit comments

Comments
 (0)