From a22e976c530caf2bf0fe7aacfacea56ccec160dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=9D=A5=E9=85=B8?= Date: Thu, 27 Jul 2017 17:33:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0opencv=5Fabsdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/opencv2/opencv_core.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/opencv2/opencv_core.h b/source/opencv2/opencv_core.h index 2443c6d..0007ea1 100644 --- a/source/opencv2/opencv_core.h +++ b/source/opencv2/opencv_core.h @@ -92,5 +92,11 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_normalize_arginfo, 0, 0, 6) ZEND_ARG_INFO(0, dtype) ZEND_END_ARG_INFO() PHP_FUNCTION(opencv_normalize); +ZEND_BEGIN_ARG_INFO_EX(opencv_absdiff_arginfo, 0, 0, 3) + ZEND_ARG_INFO(0, src1) + ZEND_ARG_INFO(0, src2) + ZEND_ARG_INFO(1, dst) +ZEND_END_ARG_INFO() +PHP_FUNCTION(opencv_absdiff); #endif //OPENCV_CORE_H From 3b6e40472f65d7e7f61f83ce41f6fd954e9eae93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=9D=A5=E9=85=B8?= Date: Thu, 27 Jul 2017 17:36:44 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0opencv=5Fabsdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/opencv2/opencv_core.cc | 111 +++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/source/opencv2/opencv_core.cc b/source/opencv2/opencv_core.cc index 6c2b496..107c646 100644 --- a/source/opencv2/opencv_core.cc +++ b/source/opencv2/opencv_core.cc @@ -374,6 +374,115 @@ PHP_FUNCTION(opencv_magnitude){ } +/** + * CV\absdiff + * @param execute_data + * @param return_value + */ +PHP_FUNCTION(opencv_absdiff){ + zval *src1_zval, *src2_zval, *dst_zval; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "zzz", + &src1_zval, + &src2_zval, + &dst_zval) == FAILURE) { + RETURN_NULL(); + } +// opencv_mat_object *src1_mat_object = NULL, *src2_mat_object = NULL, *dst_mat_object = NULL; +// opencv_scalar_object *src1_scalar_object = NULL, *src2_scalar_object = NULL, *dst_scalar_object = NULL; + + void *tmp_src1 = NULL; + void *tmp_src2 = NULL; + void *tmp_dst = NULL; + + int flag = 0;//1 mat,0 scalar + + if(Z_TYPE_P(src1_zval) != IS_OBJECT){ + char *error_message = (char*)malloc(strlen("src1 parameter must be Mat or Scalar object.") + 1); + strcpy(error_message,"src1 parameter must be Mat or Scalar object."); + opencv_throw_exception(error_message);//throw exception + free(error_message); + } + + if(Z_OBJCE_P(src1_zval) == opencv_mat_ce){ + tmp_src1 = Z_PHP_MAT_OBJ_P(src1_zval); + flag |= (1<<1); + }else if(Z_OBJCE_P(src1_zval) == opencv_scalar_ce){ + tmp_src1 = Z_PHP_SCALAR_OBJ_P(src1_zval); + }else{ + char *error_message = (char*)malloc(strlen("src1 parameter must be Mat or Scalar object.") + 1); + strcpy(error_message,"src1 parameter must be Mat or Scalar object."); + opencv_throw_exception(error_message);//throw exception + free(error_message); + } + + if(Z_TYPE_P(src2_zval) != IS_OBJECT){ + char *error_message = (char*)malloc(strlen("src2 parameter must be Mat or Scalar object.") + 1); + strcpy(error_message,"src2 parameter must be Mat or Scalar object."); + opencv_throw_exception(error_message);//throw exception + free(error_message); + } + + if(Z_OBJCE_P(src2_zval) == opencv_mat_ce){ + tmp_src2 = Z_PHP_MAT_OBJ_P(src2_zval); + flag |= (1<<0); + }else if(Z_OBJCE_P(src2_zval) == opencv_scalar_ce){ + tmp_src2 = Z_PHP_SCALAR_OBJ_P(src2_zval); + }else{ + char *error_message = (char*)malloc(strlen("src2 parameter must be Mat or Scalar object.") + 1); + strcpy(error_message,"src2 parameter must be Mat or Scalar object."); + opencv_throw_exception(error_message);//throw exception + free(error_message); + } + + zval *dst_real_zval = Z_REFVAL_P(dst_zval); + + if(flag == 0){ //both scalar + if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_scalar_ce){ + tmp_dst = Z_PHP_SCALAR_OBJ_P(dst_real_zval); + } else{ + zval instance; + Scalar dst; + object_init_ex(&instance,opencv_scalar_ce); + ZVAL_COPY_VALUE(dst_real_zval, &instance); + tmp_dst = Z_PHP_SCALAR_OBJ_P(dst_real_zval); + tmp_dst->scalar = new Scalar(dst); + } + + absdiff(*tmp_src1->mat,*tmp_src2->mat, *tmp_dst->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + }else{ + if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){ + tmp_dst = Z_PHP_MAT_OBJ_P(dst_real_zval); + } else{ + zval instance; + Mat dst; + object_init_ex(&instance,opencv_mat_ce); + ZVAL_COPY_VALUE(dst_real_zval, &instance); + tmp_dst = Z_PHP_MAT_OBJ_P(dst_real_zval); + tmp_dst->mat = new Mat(dst); + } + switch (flag){ + case 1: + absdiff(*tmp_src1->scalar,*tmp_src2->mat, *tmp_dst->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + break; + case 10: + absdiff(*tmp_src1->mat,*tmp_src2->scalar, *tmp_dst->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + break; + case 11: + absdiff(*tmp_src1->mat,*tmp_src2->mat, *tmp_dst->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + break; + default: + break; + } + } + + RETURN_NULL(); +} + /** * //todo mask and dtype params * CV\add @@ -548,4 +657,4 @@ PHP_FUNCTION(opencv_normalize){ opencv_mat_update_property_by_c_mat(dst_real_zval, dst_object->mat); RETURN_NULL(); -} \ No newline at end of file +} From 99b2ce6b802459dd639c290934d514c07e05adeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=9D=A5=E9=85=B8?= Date: Thu, 27 Jul 2017 17:40:24 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0opencv=5Fabsdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- opencv.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/opencv.cc b/opencv.cc index 0d0a1f1..88e6f23 100644 --- a/opencv.cc +++ b/opencv.cc @@ -212,6 +212,7 @@ const zend_function_entry opencv_functions[] = { ZEND_NS_NAMED_FE(OPENCV_NS, equalizeHist, ZEND_FN(opencv_equalize_hist), opencv_equalize_hist_arginfo) ZEND_NS_NAMED_FE(OPENCV_NS, resize, ZEND_FN(opencv_resize), opencv_resize_arginfo) ZEND_NS_NAMED_FE(OPENCV_NS, putText, ZEND_FN(opencv_put_text), NULL) + ZEND_NS_NAMED_FE(OPENCV_NS, absdiff, ZEND_FN(opencv_absdiff), opencv_absdiff_arginfo) PHP_FE_END /* Must be the last line in opencv_functions[] */ }; /* }}} */ From d83ba78faa126ff22646e052db6a068afa44fae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=9D=A5=E9=85=B8?= Date: Thu, 27 Jul 2017 18:25:18 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0opencv=5Fabsdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/opencv2/opencv_core.cc | 45 ++++++++++++++++------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/source/opencv2/opencv_core.cc b/source/opencv2/opencv_core.cc index 107c646..9ebedac 100644 --- a/source/opencv2/opencv_core.cc +++ b/source/opencv2/opencv_core.cc @@ -388,12 +388,8 @@ PHP_FUNCTION(opencv_absdiff){ &dst_zval) == FAILURE) { RETURN_NULL(); } -// opencv_mat_object *src1_mat_object = NULL, *src2_mat_object = NULL, *dst_mat_object = NULL; -// opencv_scalar_object *src1_scalar_object = NULL, *src2_scalar_object = NULL, *dst_scalar_object = NULL; - - void *tmp_src1 = NULL; - void *tmp_src2 = NULL; - void *tmp_dst = NULL; + opencv_mat_object *src1_mat_object = NULL, *src2_mat_object = NULL, *dst_mat_object = NULL; + opencv_scalar_object *src1_scalar_object = NULL, *src2_scalar_object = NULL, *dst_scalar_object = NULL; int flag = 0;//1 mat,0 scalar @@ -405,10 +401,10 @@ PHP_FUNCTION(opencv_absdiff){ } if(Z_OBJCE_P(src1_zval) == opencv_mat_ce){ - tmp_src1 = Z_PHP_MAT_OBJ_P(src1_zval); + src1_mat_object = Z_PHP_MAT_OBJ_P(src1_zval); flag |= (1<<1); }else if(Z_OBJCE_P(src1_zval) == opencv_scalar_ce){ - tmp_src1 = Z_PHP_SCALAR_OBJ_P(src1_zval); + src1_scalar_object = Z_PHP_SCALAR_OBJ_P(src1_zval); }else{ char *error_message = (char*)malloc(strlen("src1 parameter must be Mat or Scalar object.") + 1); strcpy(error_message,"src1 parameter must be Mat or Scalar object."); @@ -424,10 +420,10 @@ PHP_FUNCTION(opencv_absdiff){ } if(Z_OBJCE_P(src2_zval) == opencv_mat_ce){ - tmp_src2 = Z_PHP_MAT_OBJ_P(src2_zval); + src2_mat_object = Z_PHP_MAT_OBJ_P(src2_zval); flag |= (1<<0); }else if(Z_OBJCE_P(src2_zval) == opencv_scalar_ce){ - tmp_src2 = Z_PHP_SCALAR_OBJ_P(src2_zval); + src2_scalar_object = Z_PHP_SCALAR_OBJ_P(src2_zval); }else{ char *error_message = (char*)malloc(strlen("src2 parameter must be Mat or Scalar object.") + 1); strcpy(error_message,"src2 parameter must be Mat or Scalar object."); @@ -439,41 +435,42 @@ PHP_FUNCTION(opencv_absdiff){ if(flag == 0){ //both scalar if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_scalar_ce){ - tmp_dst = Z_PHP_SCALAR_OBJ_P(dst_real_zval); + dst_scalar_object = Z_PHP_SCALAR_OBJ_P(dst_real_zval); } else{ zval instance; Scalar dst; object_init_ex(&instance,opencv_scalar_ce); ZVAL_COPY_VALUE(dst_real_zval, &instance); - tmp_dst = Z_PHP_SCALAR_OBJ_P(dst_real_zval); - tmp_dst->scalar = new Scalar(dst); + dst_scalar_object = Z_PHP_SCALAR_OBJ_P(dst_real_zval); + dst_scalar_object->scalar = new Scalar(dst); } - absdiff(*tmp_src1->mat,*tmp_src2->mat, *tmp_dst->mat); - opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + absdiff(*src1_scalar_object->scalar,*src2_scalar_object->scalar, *dst_scalar_object->scalar); + opencv_scalar_update_property_by_c_scalar(dst_real_zval, dst_scalar_object->scalar); }else{ if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){ - tmp_dst = Z_PHP_MAT_OBJ_P(dst_real_zval); + dst_mat_object = Z_PHP_MAT_OBJ_P(dst_real_zval); } else{ zval instance; Mat dst; object_init_ex(&instance,opencv_mat_ce); ZVAL_COPY_VALUE(dst_real_zval, &instance); - tmp_dst = Z_PHP_MAT_OBJ_P(dst_real_zval); - tmp_dst->mat = new Mat(dst); + + dst_mat_object = Z_PHP_MAT_OBJ_P(dst_real_zval); + dst_mat_object->mat = new Mat(dst); } switch (flag){ case 1: - absdiff(*tmp_src1->scalar,*tmp_src2->mat, *tmp_dst->mat); - opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + absdiff(*src1_scalar_object->scalar,*src2_mat_object->mat, *dst_mat_object->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, dst_mat_object->mat); break; case 10: - absdiff(*tmp_src1->mat,*tmp_src2->scalar, *tmp_dst->mat); - opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + absdiff(*src1_mat_object->mat,*src2_scalar_object->scalar, *dst_mat_object->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, dst_mat_object->mat); break; case 11: - absdiff(*tmp_src1->mat,*tmp_src2->mat, *tmp_dst->mat); - opencv_mat_update_property_by_c_mat(dst_real_zval, tmp_dst->mat); + absdiff(*src1_mat_object->mat,*src2_mat_object->mat, *dst_mat_object->mat); + opencv_mat_update_property_by_c_mat(dst_real_zval, dst_mat_object->mat); break; default: break;