From a08090ec9c0a8ef47d5e38efbd53b49487ddaa76 Mon Sep 17 00:00:00 2001 From: hihozhou Date: Sun, 2 Jul 2017 22:29:57 +0800 Subject: [PATCH] CV\split function --- opencv.cc | 15 +++--- source/opencv2/core/hal/opencv_interface.cc | 14 ++--- source/opencv2/core/hal/opencv_interface.h | 14 ++--- source/opencv2/opencv_core.cc | 49 +++++++++++++++-- source/opencv2/opencv_core.h | 1 + source/opencv2/opencv_imgproc.cc | 5 +- tests/constant.phpt | 4 +- tests/split.phpt | 60 +++++++++++++++++++++ 8 files changed, 132 insertions(+), 30 deletions(-) create mode 100644 tests/split.phpt diff --git a/opencv.cc b/opencv.cc index 87946e1..fba0dbd 100644 --- a/opencv.cc +++ b/opencv.cc @@ -169,13 +169,13 @@ PHP_MINFO_FUNCTION(opencv) */ const zend_function_entry opencv_functions[] = { PHP_FE(confirm_opencv_compiled, NULL) /* For testing, remove later. */ - ZEND_NS_NAMED_FE(OPENCV_NS, cv_8uc_n, ZEND_FN(opencv_cv_8uc_n), NULL) - ZEND_NS_NAMED_FE(OPENCV_NS, cv_8sc_n, ZEND_FN(opencv_cv_8sc_n), NULL) - ZEND_NS_NAMED_FE(OPENCV_NS, cv_16uc_n, ZEND_FN(opencv_cv_16uc_n), NULL) - ZEND_NS_NAMED_FE(OPENCV_NS, cv_16sc_n, ZEND_FN(opencv_cv_16sc_n), NULL) - ZEND_NS_NAMED_FE(OPENCV_NS, cv_32sc_n, ZEND_FN(opencv_cv_32sc_n), NULL) - ZEND_NS_NAMED_FE(OPENCV_NS, cv_32fc_n, ZEND_FN(opencv_cv_32fc_n), NULL) - ZEND_NS_NAMED_FE(OPENCV_NS, cv_64fc_n, ZEND_FN(opencv_cv_64fc_n), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_8UC, ZEND_FN(opencv_cv_8uc), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_8SC, ZEND_FN(opencv_cv_8sc), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_16UC, ZEND_FN(opencv_cv_16uc), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_16SC, ZEND_FN(opencv_cv_16sc), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_32SC, ZEND_FN(opencv_cv_32sc), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_32FC, ZEND_FN(opencv_cv_32fc), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, CV_64FC, ZEND_FN(opencv_cv_64fc), NULL) ZEND_NS_NAMED_FE(OPENCV_NS, imread, ZEND_FN(opencv_imread), NULL) ZEND_NS_NAMED_FE(OPENCV_NS, imwrite, ZEND_FN(opencv_imwrite), NULL) ZEND_NS_NAMED_FE(OPENCV_NS, imshow, ZEND_FN(opencv_imshow), NULL) @@ -189,6 +189,7 @@ const zend_function_entry opencv_functions[] = { ZEND_NS_NAMED_FE(OPENCV_NS, rectangleByPoint, ZEND_FN(opencv_rectangle_by_point), NULL) ZEND_NS_NAMED_FE(OPENCV_NS, rectangleByRect, ZEND_FN(opencv_rectangle_by_rect), NULL) ZEND_NS_NAMED_FE(OPENCV_NS, addWeighted, ZEND_FN(opencv_add_weighted), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, split, ZEND_FN(opencv_split), NULL) PHP_FE_END /* Must be the last line in opencv_functions[] */ }; /* }}} */ diff --git a/source/opencv2/core/hal/opencv_interface.cc b/source/opencv2/core/hal/opencv_interface.cc index 6dd0f12..7a6a97f 100644 --- a/source/opencv2/core/hal/opencv_interface.cc +++ b/source/opencv2/core/hal/opencv_interface.cc @@ -54,7 +54,7 @@ void opencv_interface_init(int module_number) } -PHP_FUNCTION(opencv_cv_8uc_n) +PHP_FUNCTION(opencv_cv_8uc) { long num; @@ -64,7 +64,7 @@ PHP_FUNCTION(opencv_cv_8uc_n) RETURN_LONG(CV_8UC(num)); } -PHP_FUNCTION(opencv_cv_8sc_n) +PHP_FUNCTION(opencv_cv_8sc) { long num; @@ -75,7 +75,7 @@ PHP_FUNCTION(opencv_cv_8sc_n) } -PHP_FUNCTION(opencv_cv_16uc_n) +PHP_FUNCTION(opencv_cv_16uc) { long num; @@ -85,7 +85,7 @@ PHP_FUNCTION(opencv_cv_16uc_n) RETURN_LONG(CV_16UC(num)); } -PHP_FUNCTION(opencv_cv_16sc_n) +PHP_FUNCTION(opencv_cv_16sc) { long num; @@ -95,7 +95,7 @@ PHP_FUNCTION(opencv_cv_16sc_n) RETURN_LONG(CV_16SC(num)); } -PHP_FUNCTION(opencv_cv_32sc_n) +PHP_FUNCTION(opencv_cv_32sc) { long num; @@ -105,7 +105,7 @@ PHP_FUNCTION(opencv_cv_32sc_n) RETURN_LONG(CV_32SC(num)); } -PHP_FUNCTION(opencv_cv_32fc_n) +PHP_FUNCTION(opencv_cv_32fc) { long num; @@ -116,7 +116,7 @@ PHP_FUNCTION(opencv_cv_32fc_n) } -PHP_FUNCTION(opencv_cv_64fc_n) +PHP_FUNCTION(opencv_cv_64fc) { long num; diff --git a/source/opencv2/core/hal/opencv_interface.h b/source/opencv2/core/hal/opencv_interface.h index 74beba7..923f680 100644 --- a/source/opencv2/core/hal/opencv_interface.h +++ b/source/opencv2/core/hal/opencv_interface.h @@ -2,11 +2,11 @@ #define OPENCV_INTERFACE_H extern void opencv_interface_init(int module_number); -extern PHP_FUNCTION(opencv_cv_8uc_n); -extern PHP_FUNCTION(opencv_cv_8sc_n); -extern PHP_FUNCTION(opencv_cv_16uc_n); -extern PHP_FUNCTION(opencv_cv_16sc_n); -extern PHP_FUNCTION(opencv_cv_32sc_n); -extern PHP_FUNCTION(opencv_cv_32fc_n); -extern PHP_FUNCTION(opencv_cv_64fc_n); +extern PHP_FUNCTION(opencv_cv_8uc); +extern PHP_FUNCTION(opencv_cv_8sc); +extern PHP_FUNCTION(opencv_cv_16uc); +extern PHP_FUNCTION(opencv_cv_16sc); +extern PHP_FUNCTION(opencv_cv_32sc); +extern PHP_FUNCTION(opencv_cv_32fc); +extern PHP_FUNCTION(opencv_cv_64fc); #endif //OPENCV_INTERFACE_H diff --git a/source/opencv2/opencv_core.cc b/source/opencv2/opencv_core.cc index ca2c3fe..537b250 100644 --- a/source/opencv2/opencv_core.cc +++ b/source/opencv2/opencv_core.cc @@ -85,7 +85,50 @@ PHP_FUNCTION(opencv_add_weighted){ opencv_mat_update_property_by_c_mat(&instance, new_obj->mat); RETURN_ZVAL(&instance,0,0); } - - - } + +/** + * CV\split + * @param execute_data + * @param return_value + */ +PHP_FUNCTION(opencv_split){ + double alpha, beta, gamma; + long dtype = -1; + zval *src_zval; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &src_zval, opencv_mat_ce) == FAILURE) { + RETURN_NULL(); + } + opencv_mat_object *src_obj = Z_PHP_MAT_OBJ_P(src_zval); + std::vector channels; + split(*src_obj->mat,channels); + zval return_val,blue_zval,green_zval,red_zval; + Mat blue,green,red; + array_init(&return_val); + + object_init_ex(&blue_zval,opencv_mat_ce); + opencv_mat_object *blue_mat_object = Z_PHP_MAT_OBJ_P(&blue_zval); + blue = channels.at(0); + blue_mat_object->mat = new Mat(blue); + opencv_mat_update_property_by_c_mat(&blue_zval,blue_mat_object->mat); + + object_init_ex(&green_zval,opencv_mat_ce); + opencv_mat_object *green_mat_object = Z_PHP_MAT_OBJ_P(&green_zval); + green = channels.at(1); + green_mat_object->mat = new Mat(green); + opencv_mat_update_property_by_c_mat(&green_zval,green_mat_object->mat); + + object_init_ex(&red_zval,opencv_mat_ce); + opencv_mat_object *red_mat_object = Z_PHP_MAT_OBJ_P(&red_zval); + red = channels.at(2); + red_mat_object->mat = new Mat(red); + opencv_mat_update_property_by_c_mat(&red_zval,red_mat_object->mat); + + add_next_index_zval(&return_val,&blue_zval); + add_next_index_zval(&return_val,&green_zval); + add_next_index_zval(&return_val,&red_zval); + + RETURN_ZVAL(&return_val,0,0); +} + diff --git a/source/opencv2/opencv_core.h b/source/opencv2/opencv_core.h index 3511057..0e9fc03 100644 --- a/source/opencv2/opencv_core.h +++ b/source/opencv2/opencv_core.h @@ -12,5 +12,6 @@ extern void opencv_core_init(int module_number); extern zend_class_entry *opencv_formatter_ce; PHP_FUNCTION(opencv_add_weighted); +PHP_FUNCTION(opencv_split); #endif //OPENCV_CORE_H diff --git a/source/opencv2/opencv_imgproc.cc b/source/opencv2/opencv_imgproc.cc index 3f55b7f..37d5292 100644 --- a/source/opencv2/opencv_imgproc.cc +++ b/source/opencv2/opencv_imgproc.cc @@ -34,10 +34,7 @@ PHP_FUNCTION(opencv_cv_t_color){ dst_obj->mat=new Mat(dstImg); - //update php Mat object property - zend_update_property_long(opencv_mat_ce, &instance, "rows", sizeof("rows")-1, dst_obj->mat->rows); - zend_update_property_long(opencv_mat_ce, &instance, "cols", sizeof("cols")-1, dst_obj->mat->cols); - zend_update_property_long(opencv_mat_ce, &instance, "type", sizeof("type")-1, dst_obj->mat->type()); + opencv_mat_update_property_by_c_mat(&instance,dst_obj->mat); RETURN_ZVAL(&instance,0,0); //return php Mat object } diff --git a/tests/constant.phpt b/tests/constant.phpt index d9375a3..0c36df8 100644 --- a/tests/constant.phpt +++ b/tests/constant.phpt @@ -4,7 +4,7 @@ Check for opencv constant --FILE-- --EXPECT-- diff --git a/tests/split.phpt b/tests/split.phpt new file mode 100644 index 0000000..7a15856 --- /dev/null +++ b/tests/split.phpt @@ -0,0 +1,60 @@ +--TEST-- +split test +--SKIPIF-- + +--FILE-- +print(Formatter::FMT_PYTHON); +$b->print(Formatter::FMT_PYTHON); +$g->print(Formatter::FMT_PYTHON); +$r->print(Formatter::FMT_PYTHON); +--EXPECT-- +[[[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]], + [[ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12], [ 10, 11, 12]]] +[[ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], + [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]] +[[ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], + [ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]] +[[ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12]] \ No newline at end of file