Skip to content

Commit 5a2eeef

Browse files
committed
Add CV\floodFill function
1 parent da8376e commit 5a2eeef

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

opencv.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ const zend_function_entry opencv_functions[] = {
234234
ZEND_NS_NAMED_FE(OPENCV_NS, LUT, ZEND_FN(opencv_lut), opencv_lut_arginfo)
235235
ZEND_NS_NAMED_FE(OPENCV_NS, getTickCount, ZEND_FN(opencv_get_tick_count), NULL)
236236
ZEND_NS_NAMED_FE(OPENCV_NS, getTickFrequency, ZEND_FN(opencv_get_tick_frequency), NULL)
237+
ZEND_NS_NAMED_FE(OPENCV_NS, floodFill, ZEND_FN(opencv_flood_fill), opencv_flood_fill_arginfo)
237238
PHP_FE_END /* Must be the last line in opencv_functions[] */
238239
};
239240
/* }}} */

source/opencv2/opencv_imgproc.cc

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,67 @@ PHP_FUNCTION(opencv_morphology_ex){
983983
RETURN_NULL();
984984
}
985985

986+
987+
PHP_FUNCTION(opencv_flood_fill){
988+
zval *image_zval, *seed_point_zval, *new_val_zval, *mask_zval = NULL, *rect_zval = NULL, *lo_diff_zval = NULL, *up_diff_zval = NULL;
989+
long flags = 4;
990+
991+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OOOO!|O!OOl",
992+
&image_zval, opencv_mat_ce,
993+
&seed_point_zval, opencv_point_ce,
994+
&new_val_zval, opencv_scalar_ce,
995+
&mask_zval, opencv_mat_ce,
996+
&rect_zval, opencv_rect_ce,
997+
&lo_diff_zval, opencv_scalar_ce,
998+
&up_diff_zval, opencv_scalar_ce,
999+
&flags) == FAILURE) {
1000+
RETURN_NULL();
1001+
}
1002+
opencv_mat_object *image_object;
1003+
opencv_point_object *seed_point_object;
1004+
opencv_scalar_object *new_value_object;
1005+
1006+
image_object = Z_PHP_MAT_OBJ_P(image_zval);
1007+
seed_point_object = Z_PHP_POINT_OBJ_P(seed_point_zval);
1008+
new_value_object = Z_PHP_SCALAR_OBJ_P(new_val_zval);
1009+
1010+
Rect *rect = 0 ;
1011+
Scalar lo_diff = Scalar(), up_diff = Scalar();
1012+
opencv_rect_object *rect_object;
1013+
if(rect_zval != NULL){
1014+
rect_object = Z_PHP_RECT_OBJ_P(rect_zval);
1015+
rect = rect_object->rect;
1016+
}
1017+
if(lo_diff_zval != NULL){
1018+
opencv_scalar_object *lo_diff_object = Z_PHP_SCALAR_OBJ_P(lo_diff_zval);
1019+
lo_diff = *lo_diff_object->scalar;
1020+
}
1021+
1022+
if(up_diff_zval != NULL){
1023+
opencv_scalar_object *up_diff_object = Z_PHP_SCALAR_OBJ_P(up_diff_zval);
1024+
up_diff = *up_diff_object->scalar;
1025+
}
1026+
1027+
int result;
1028+
try {
1029+
if(mask_zval == NULL){
1030+
result = floodFill(*image_object->mat, *seed_point_object->point, *new_value_object->scalar, rect, lo_diff, up_diff, (int)flags);
1031+
}else{
1032+
opencv_mat_object *mask_object = Z_PHP_MAT_OBJ_P(mask_zval);
1033+
result= floodFill(*image_object->mat, *mask_object->mat, *seed_point_object->point, *new_value_object->scalar, rect, lo_diff, up_diff, (int)flags);
1034+
}
1035+
1036+
if(rect_zval != NULL){
1037+
opencv_rect_update_property_by_c_rect(rect_zval,rect_object->rect);
1038+
}
1039+
1040+
}catch (Exception e){
1041+
opencv_throw_exception(e.what());
1042+
RETURN_NULL();
1043+
}
1044+
RETURN_LONG(result);
1045+
}
1046+
9861047
/**
9871048
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
9881049
* @param module_number

source/opencv2/opencv_imgproc.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,16 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_morphology_ex_arginfo, 0, 0, 8)
195195
ZEND_END_ARG_INFO()
196196
PHP_FUNCTION(opencv_morphology_ex);
197197

198+
ZEND_BEGIN_ARG_INFO_EX(opencv_flood_fill_arginfo, 0, 0, 8)
199+
ZEND_ARG_INFO(0, image)
200+
ZEND_ARG_INFO(0, seedPoint)
201+
ZEND_ARG_INFO(0, newVal)
202+
ZEND_ARG_INFO(0, mask)
203+
ZEND_ARG_INFO(0, rect)
204+
ZEND_ARG_INFO(0, loDiff)
205+
ZEND_ARG_INFO(0, upDiff)
206+
ZEND_ARG_INFO(0, flags)
207+
ZEND_END_ARG_INFO()
208+
PHP_FUNCTION(opencv_flood_fill);
209+
198210
#endif //OPENCV_OPENCV_IMGPROC_H

0 commit comments

Comments
 (0)