From 7b334384fca89fc106d549bfba297b57f2d06c6f Mon Sep 17 00:00:00 2001 From: Vladimir Goncharov Date: Mon, 25 Mar 2019 00:47:28 +0200 Subject: [PATCH] opencv 4.0.1 support + pull from hihozhou --- config.m4 | 12 +- source/opencv2/core/hal/opencv_interface.cc | 3 +- source/opencv2/core/opencv_mat.cc | 6 +- source/opencv2/core/opencv_type.cc | 22 ++ source/opencv2/face/opencv_facerec.cc | 2 +- source/opencv2/opencv_core.cc | 25 +- source/opencv2/opencv_imgproc.cc | 258 ++++++++++++++++++ source/opencv2/opencv_imgproc.h | 38 +++ source/opencv2/opencv_objdetect.cc | 8 +- .../{videoCapture.phpt_ => videoCapture.phpt} | 6 +- 10 files changed, 351 insertions(+), 29 deletions(-) rename tests/{videoCapture.phpt_ => videoCapture.phpt} (82%) diff --git a/config.m4 b/config.m4 index 436419d..a761642 100644 --- a/config.m4 +++ b/config.m4 @@ -66,19 +66,19 @@ if test "$PHP_OPENCV" != "no"; then if test -f "$PKG_CONFIG"; then AC_MSG_RESULT(found) AC_MSG_CHECKING(for opencv) - if $PKG_CONFIG --exists opencv; then - if $PKG_CONFIG --atleast-version=3.3.0 opencv; then - opencv_version=`$PKG_CONFIG --modversion opencv` + if $PKG_CONFIG --exists opencv4; then + if $PKG_CONFIG --atleast-version=4.0.0 opencv4; then + opencv_version=`$PKG_CONFIG --modversion opencv4` AC_MSG_RESULT([found $opencv_version]) dnl Add c++ opencv libs and includes by pkg-config - OPENCV_LIBS=`$PKG_CONFIG --libs opencv` - OPENCV_INCS=`$PKG_CONFIG --cflags opencv` + OPENCV_LIBS=`$PKG_CONFIG --libs opencv4` + OPENCV_INCS=`$PKG_CONFIG --cflags opencv4` PHP_EVAL_INCLINE($OPENCV_INCS) PHP_EVAL_LIBLINE($OPENCV_LIBS, OPENCV_SHARED_LIBADD) AC_DEFINE(HAVE_OPENCV, 1, [whether opencv exists in the system]) else AC_MSG_RESULT(too old) - AC_MSG_ERROR(Ooops ! You need at least opencv 3.3.0) + AC_MSG_ERROR(Ooops ! You need at least opencv 4.0.0) fi else AC_MSG_RESULT(not found) diff --git a/source/opencv2/core/hal/opencv_interface.cc b/source/opencv2/core/hal/opencv_interface.cc index 7a746ba..3fa91b2 100644 --- a/source/opencv2/core/hal/opencv_interface.cc +++ b/source/opencv2/core/hal/opencv_interface.cc @@ -27,7 +27,8 @@ void opencv_interface_init(int module_number) REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_32S", CV_32S, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_32F", CV_32F, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_64F", CV_64F, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_USRTYPE1", CV_USRTYPE1, CONST_CS | CONST_PERSISTENT); + char *cv_usrtype1 = (char*)malloc(strlen("CV_USRTYPE1 support has been dropped in OpenCV 4.0") + 1); + REGISTER_NS_STRING_CONSTANT(OPENCV_NS, "CV_USRTYPE1", cv_usrtype1, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_8UC1", CV_8UC1, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_8UC2", CV_8UC2, CONST_CS | CONST_PERSISTENT); diff --git a/source/opencv2/core/opencv_mat.cc b/source/opencv2/core/opencv_mat.cc index 13a9f1d..3a20fda 100644 --- a/source/opencv2/core/opencv_mat.cc +++ b/source/opencv2/core/opencv_mat.cc @@ -196,8 +196,12 @@ PHP_METHOD(opencv_mat, print) if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &type) == FAILURE) { RETURN_NULL(); } + opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis()); - std::cout << format(*(obj->mat),int(type)) << std::endl; + //long转cv::Formatter::FormatType类型 + cv::Formatter::FormatType formatType = static_cast((int)type); + std::cout << format(*(obj->mat), formatType) << std::endl; + RETURN_NULL(); } diff --git a/source/opencv2/core/opencv_type.cc b/source/opencv2/core/opencv_type.cc index 7d62893..f154c5d 100644 --- a/source/opencv2/core/opencv_type.cc +++ b/source/opencv2/core/opencv_type.cc @@ -690,11 +690,33 @@ PHP_METHOD(opencv_rotated_rect, __construct) opencv_rotated_rect_update_property_by_c_rotated_rect(getThis(), obj->rotatedRect); } + +PHP_METHOD(opencv_rotated_rect, points) +{ + opencv_rotated_rect_object *this_object = Z_PHP_ROTATED_RECT_OBJ_P(getThis()); + + cv::Point2f pts[4]; + this_object->rotatedRect->points(pts); + zval instance; + + array_init(&instance); + for (int i = 0; i < 4; i++) { + zval OPENCV_CONNECT(point_zval,i); + object_init_ex(&OPENCV_CONNECT(point_zval,i), opencv_point_ce); + Z_PHP_POINT_OBJ_P(&OPENCV_CONNECT(point_zval,i))->point = new Point(pts[i]); + opencv_point_update_property_by_c_point(&OPENCV_CONNECT(point_zval,i), Z_PHP_POINT_OBJ_P(&OPENCV_CONNECT(point_zval,i))->point); + add_next_index_zval(&instance,&OPENCV_CONNECT(point_zval,i)); + } + RETURN_ZVAL(&instance,0,0); + +} + /** * opencv_rect_methods[] */ const zend_function_entry opencv_rotated_rect_methods[] = { PHP_ME(opencv_rotated_rect, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) + PHP_ME(opencv_rotated_rect, points, NULL, ZEND_ACC_PUBLIC) PHP_FE_END }; /* }}} */ diff --git a/source/opencv2/face/opencv_facerec.cc b/source/opencv2/face/opencv_facerec.cc index f4b2df2..80b16f6 100644 --- a/source/opencv2/face/opencv_facerec.cc +++ b/source/opencv2/face/opencv_facerec.cc @@ -239,7 +239,7 @@ void opencv_lbph_face_recognizer_free_obj(zend_object *object) { opencv_lbph_face_recognizer_object *obj; obj = get_lbph_face_recognizer_obj(object); - delete obj->faceRecognizer; + //delete obj->faceRecognizer; //todo: it's hotfix for: double free or corruption (out) Aborted (core dumped) zend_object_std_dtor(object); } diff --git a/source/opencv2/opencv_core.cc b/source/opencv2/opencv_core.cc index c4d7921..1b7f966 100644 --- a/source/opencv2/opencv_core.cc +++ b/source/opencv2/opencv_core.cc @@ -60,19 +60,20 @@ void opencv_norm_types_const_init(int module_number){ REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "NORM_MINMAX", NORM_MINMAX, CONST_CS | CONST_PERSISTENT); } -void opencv_hershey_fonts_const_init(int module_number){ +//todo +//void opencv_hershey_fonts_const_init(int module_number){ //cv::HersheyFonts - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SIMPLEX", FONT_HERSHEY_SIMPLEX, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_PLAIN", FONT_HERSHEY_PLAIN, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_DUPLEX", FONT_HERSHEY_DUPLEX, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_COMPLEX", FONT_HERSHEY_COMPLEX, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_TRIPLEX", FONT_HERSHEY_TRIPLEX, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_COMPLEX_SMALL", FONT_HERSHEY_COMPLEX_SMALL, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SCRIPT_SIMPLEX", FONT_HERSHEY_SCRIPT_SIMPLEX, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SCRIPT_COMPLEX", FONT_HERSHEY_SCRIPT_COMPLEX, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_ITALIC", FONT_ITALIC, CONST_CS | CONST_PERSISTENT); -} +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SIMPLEX", FONT_HERSHEY_SIMPLEX, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_PLAIN", FONT_HERSHEY_PLAIN, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_DUPLEX", FONT_HERSHEY_DUPLEX, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_COMPLEX", FONT_HERSHEY_COMPLEX, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_TRIPLEX", FONT_HERSHEY_TRIPLEX, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_COMPLEX_SMALL", FONT_HERSHEY_COMPLEX_SMALL, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SCRIPT_SIMPLEX", FONT_HERSHEY_SCRIPT_SIMPLEX, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SCRIPT_COMPLEX", FONT_HERSHEY_SCRIPT_COMPLEX, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_ITALIC", FONT_ITALIC, CONST_CS | CONST_PERSISTENT); +//} void opencv_core_init(int module_number) @@ -80,7 +81,7 @@ void opencv_core_init(int module_number) opencv_formatter_init(); opencv_formatter_const_init(module_number); opencv_norm_types_const_init(module_number); - opencv_hershey_fonts_const_init(module_number); +// opencv_hershey_fonts_const_init(module_number); } diff --git a/source/opencv2/opencv_imgproc.cc b/source/opencv2/opencv_imgproc.cc index 8cfbf11..4748c1d 100644 --- a/source/opencv2/opencv_imgproc.cc +++ b/source/opencv2/opencv_imgproc.cc @@ -1295,6 +1295,264 @@ PHP_FUNCTION(opencv_bounding_rect){ RETURN_ZVAL(&instance,0,0); //return php Rect object } + +/** + * CV\getRotationMatrix2D + * @param execute_data + * @param return_value + */ +PHP_FUNCTION (opencv_get_rotation_matrix2D) { + zval *center_zval; + double angle, scale; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Odd", ¢er_zval, opencv_point_ce, &angle, &scale) == FAILURE) { + RETURN_NULL(); + } + + opencv_point_object *center_object = Z_PHP_POINT_OBJ_P(center_zval); + Mat mat = getRotationMatrix2D(Point2f(*center_object->point), angle, scale); + + zval instance; + object_init_ex(&instance, opencv_mat_ce); + opencv_mat_object *instance_object = Z_PHP_MAT_OBJ_P(&instance); + + instance_object->mat = new Mat(mat); + + opencv_mat_update_property_by_c_mat(&instance, instance_object->mat); + + RETURN_ZVAL(&instance, 0, 0); //return php Mat object + +} + + +/** + * CV\warpAffine + * @param execute_data + * @param return_value + */ +PHP_FUNCTION (opencv_warp_affine) { + zval *src_zval, *dst_zval, *M_zval, *dsize_zval, *border_value_zval = NULL; + long flags = INTER_LINEAR, borderMode = BORDER_CONSTANT; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzOO|llO", + &src_zval, opencv_mat_ce, + &dst_zval, + &M_zval, opencv_mat_ce, + &dsize_zval, opencv_size_ce, + &flags, &borderMode, + &border_value_zval, opencv_scalar_ce) == FAILURE) { + RETURN_NULL(); + } + + Scalar borderValue = Scalar(); + if (border_value_zval != NULL) { + opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P(border_value_zval); + borderValue = *border_value_object->scalar; + } + opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval); + opencv_mat_object *M_object = Z_PHP_MAT_OBJ_P(M_zval); + opencv_size_object *dsize_object = Z_PHP_SIZE_OBJ_P(dsize_zval); + + opencv_mat_object *dst_object; + zval *dst_real_zval = Z_REFVAL_P(dst_zval); + + if (Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce) { + // is Point object + dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval); + } else { + // isn't Mat object + zval_ptr_dtor(dst_real_zval); + zval instance; + object_init_ex(&instance, opencv_mat_ce); + ZVAL_COPY_VALUE(dst_real_zval, &instance);// Cover dst_real_zval by Mat object + dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval); + } + Mat dst; + warpAffine(*src_object->mat, dst, *M_object->mat, *dsize_object->size, (int) flags, (int) borderMode, borderValue); + dst_object->mat = new Mat(dst); + opencv_mat_update_property_by_c_mat(dst_real_zval, dst_object->mat); + + RETURN_NULL(); + +} + + +PHP_FUNCTION (opencv_get_rect_sub_pix) { + zval *image_zval, *patch_size_zval, *center_zval, *patch_zval; + long patchType = -1; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OOOz|l", + &image_zval, opencv_mat_ce, + &patch_size_zval, opencv_size_ce, + ¢er_zval, opencv_point_ce, + &patch_zval, + &patchType) == FAILURE) { + RETURN_NULL(); + } + + + opencv_mat_object *image_object = Z_PHP_MAT_OBJ_P(image_zval); + opencv_size_object *patch_size_object = Z_PHP_SIZE_OBJ_P(patch_size_zval); + opencv_point_object *center_object = Z_PHP_POINT_OBJ_P(center_zval); + + opencv_mat_object *patch_object; + zval *patch_real_zval = Z_REFVAL_P(patch_zval); + + if (Z_TYPE_P(patch_real_zval) == IS_OBJECT && Z_OBJCE_P(patch_real_zval) == opencv_mat_ce) { + // is Point object + patch_object = Z_PHP_MAT_OBJ_P(patch_real_zval); + } else { + // isn't Mat object + zval_ptr_dtor(patch_real_zval); + zval instance; + object_init_ex(&instance, opencv_mat_ce); + ZVAL_COPY_VALUE(patch_real_zval, &instance);// Cover dst_real_zval by Mat object + patch_object = Z_PHP_MAT_OBJ_P(patch_real_zval); + } + Mat patch; + getRectSubPix(*image_object->mat, *patch_size_object->size, Point2f(*center_object->point), patch, (int) patchType); + patch_object->mat = new Mat(patch); + opencv_mat_update_property_by_c_mat(patch_real_zval, patch_object->mat); + + RETURN_NULL(); + +} + +/** + * @see cv::getPerspectiveTransform + * @param execute_data + * @param return_value + */ +PHP_FUNCTION(opencv_get_perspective_transform){ + + zval *src_zval,*dst_zval; + long solveMethod = DECOMP_LU; + + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_THROW, ZEND_NUM_ARGS(), "aa|l", + &src_zval , + &dst_zval , + &solveMethod + ) == FAILURE) { + RETURN_NULL(); + } + + zend_ulong _h; + zval *array_val_zval; + std::vector src_points, dst_points; + opencv_point_object *point_object; + //src point数组 + unsigned long src_count = zend_hash_num_elements(Z_ARRVAL_P(src_zval));//获取数组长度 + src_points.reserve(src_count);//指定长度 + ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(src_zval), _h, array_val_zval) + {//get point arrays + again1: + if (Z_TYPE_P(array_val_zval) == IS_OBJECT && Z_OBJCE_P(array_val_zval) == opencv_point_ce) { + point_object = Z_PHP_POINT_OBJ_P(array_val_zval); + src_points.push_back(*point_object->point); + } else if (Z_TYPE_P(array_val_zval) == IS_REFERENCE) { + array_val_zval = Z_REFVAL_P(array_val_zval); + goto again1; + } else { + opencv_throw_exception("The parameter src can only be a Point object two bit array."); + RETURN_NULL(); + } + } + ZEND_HASH_FOREACH_END(); + + //dst point数组 + unsigned long dst_count = zend_hash_num_elements(Z_ARRVAL_P(dst_zval));//获取数组长度 + dst_points.reserve(dst_count);//指定长度 + ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(dst_zval), _h, array_val_zval) + {//get point arrays + again2: + if (Z_TYPE_P(array_val_zval) == IS_OBJECT && Z_OBJCE_P(array_val_zval) == opencv_point_ce) { + point_object = Z_PHP_POINT_OBJ_P(array_val_zval); + dst_points.push_back(*point_object->point); + } else if (Z_TYPE_P(array_val_zval) == IS_REFERENCE) { + array_val_zval = Z_REFVAL_P(array_val_zval); + goto again2; + } else { + opencv_throw_exception("The parameter dst can only be a Point object two bit array."); + RETURN_NULL(); + } + } + ZEND_HASH_FOREACH_END(); + + try { + Mat mat = getPerspectiveTransform(src_points, dst_points, (int)solveMethod); + zval instance; + object_init_ex(&instance, opencv_mat_ce); + opencv_mat_object *instance_object = Z_PHP_MAT_OBJ_P(&instance); + + instance_object->mat = new Mat(mat); + + opencv_mat_update_property_by_c_mat(&instance, instance_object->mat); + + RETURN_ZVAL(&instance, 0, 0); //return php Mat object + } catch (Exception e) { + opencv_throw_exception(e.what()); + } + +} + + +PHP_FUNCTION(opencv_warp_perspective){ + + zval *src_zval, *dst_zval, *M_zval, *dsize_zval, *border_value_zval = nullptr; + long flags = INTER_LINEAR ,borderMode = BORDER_CONSTANT; + + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_THROW, ZEND_NUM_ARGS(), "OzOO|llO", + &src_zval ,opencv_mat_ce, + &dst_zval , + &M_zval ,opencv_mat_ce, + &dsize_zval ,opencv_size_ce, + &flags, + &borderMode, + &border_value_zval, opencv_scalar_ce + ) == FAILURE) { + RETURN_NULL(); + } + + Scalar borderValue = Scalar(); + if (border_value_zval != nullptr) { + opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P(border_value_zval); + borderValue = *border_value_object->scalar; + } + + opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval); + opencv_mat_object *M_object = Z_PHP_MAT_OBJ_P(M_zval); + opencv_size_object *dsize_object = Z_PHP_SIZE_OBJ_P(dsize_zval); + + opencv_mat_object *dst_object; + zval *dst_real_zval = Z_REFVAL_P(dst_zval); + + if (Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce) { + // is Point object + dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval); + } else { + // isn't Mat object + zval_ptr_dtor(dst_real_zval); + zval instance; + object_init_ex(&instance, opencv_mat_ce); + ZVAL_COPY_VALUE(dst_real_zval, &instance);// Cover dst_real_zval by Mat object + dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval); + } + try{ + Mat dst; + warpPerspective(*src_object->mat, dst, *M_object->mat, *dsize_object->size, (int) flags, (int) borderMode, borderValue); + dst_object->mat = new Mat(dst); + opencv_mat_update_property_by_c_mat(dst_real_zval, dst_object->mat); + + RETURN_NULL(); + + } catch (Exception e) { + opencv_throw_exception(e.what()); + } + + +} + + /** * color conversion code in CV\cvtColor,opencv enum ColorConversionCodes * @param module_number diff --git a/source/opencv2/opencv_imgproc.h b/source/opencv2/opencv_imgproc.h index f18995a..544bf0d 100644 --- a/source/opencv2/opencv_imgproc.h +++ b/source/opencv2/opencv_imgproc.h @@ -247,6 +247,44 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_draw_contours_arginfo, 0, 0, 9) ZEND_END_ARG_INFO() PHP_FUNCTION(opencv_draw_contours); PHP_FUNCTION(opencv_bounding_rect); +PHP_FUNCTION(opencv_get_rotation_matrix2D); +ZEND_BEGIN_ARG_INFO_EX(opencv_warp_affine_arginfo, 0, 0, 7) + ZEND_ARG_INFO(0, src) + ZEND_ARG_INFO(1, dst) + ZEND_ARG_INFO(0, M) + ZEND_ARG_INFO(0, dsize) + ZEND_ARG_INFO(0, flags) + ZEND_ARG_INFO(0, borderMode) + ZEND_ARG_INFO(0, borderValue) +ZEND_END_ARG_INFO() +PHP_FUNCTION(opencv_warp_affine); +ZEND_BEGIN_ARG_INFO_EX(opencv_get_rect_sub_pix_arginfo, 0, 0, 5) + ZEND_ARG_INFO(0, image) + ZEND_ARG_INFO(0, patchSize) + ZEND_ARG_INFO(0, center) + ZEND_ARG_INFO(1, patch) + ZEND_ARG_INFO(0, patchType) +ZEND_END_ARG_INFO() +PHP_FUNCTION(opencv_get_rect_sub_pix); + + +ZEND_BEGIN_ARG_INFO_EX(opencv_get_perspective_transform_arginfo, 0, 0, 5) + ZEND_ARG_INFO(0, src) + ZEND_ARG_INFO(0, dst) + ZEND_ARG_INFO(0, solveMethod) +ZEND_END_ARG_INFO() +PHP_FUNCTION(opencv_get_perspective_transform); + +ZEND_BEGIN_ARG_INFO_EX(opencv_warp_perspective_arginfo, 0, 0, 7) + ZEND_ARG_INFO(0, src) + ZEND_ARG_INFO(1, dst) + ZEND_ARG_INFO(0, M) + ZEND_ARG_INFO(0, dsize) + ZEND_ARG_INFO(0, flags) + ZEND_ARG_INFO(0, borderMode) + ZEND_ARG_INFO(0, borderValue) +ZEND_END_ARG_INFO() +PHP_FUNCTION(opencv_warp_perspective); #endif //OPENCV_OPENCV_IMGPROC_H diff --git a/source/opencv2/opencv_objdetect.cc b/source/opencv2/opencv_objdetect.cc index ce464c2..8fc78b1 100644 --- a/source/opencv2/opencv_objdetect.cc +++ b/source/opencv2/opencv_objdetect.cc @@ -175,10 +175,10 @@ void opencv_cascade_classifier_init(int module_number){ void opencv_objdetect_constants_init(int module_number) { - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_DO_CANNY_PRUNING", CV_HAAR_DO_CANNY_PRUNING, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_SCALE_IMAGE", CV_HAAR_SCALE_IMAGE, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_FIND_BIGGEST_OBJECT", CV_HAAR_FIND_BIGGEST_OBJECT, CONST_CS | CONST_PERSISTENT); - REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_DO_ROUGH_SEARCH", CV_HAAR_DO_ROUGH_SEARCH, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_DO_CANNY_PRUNING", CV_HAAR_DO_CANNY_PRUNING, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_SCALE_IMAGE", CV_HAAR_SCALE_IMAGE, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_FIND_BIGGEST_OBJECT", CV_HAAR_FIND_BIGGEST_OBJECT, CONST_CS | CONST_PERSISTENT); +// REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_DO_ROUGH_SEARCH", CV_HAAR_DO_ROUGH_SEARCH, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CASCADE_DO_CANNY_PRUNING", CASCADE_DO_CANNY_PRUNING, CONST_CS | CONST_PERSISTENT); REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CASCADE_SCALE_IMAGE", CASCADE_SCALE_IMAGE, CONST_CS | CONST_PERSISTENT); diff --git a/tests/videoCapture.phpt_ b/tests/videoCapture.phpt similarity index 82% rename from tests/videoCapture.phpt_ rename to tests/videoCapture.phpt index d7a8c13..4723ff9 100644 --- a/tests/videoCapture.phpt_ +++ b/tests/videoCapture.phpt @@ -8,13 +8,11 @@ use CV\VideoCapture; $video=new VideoCapture(); var_dump($video->isOpened()); -$video->open(0); +//$video->open(0); var_dump($video); -var_dump($video->isOpened()); ?> --EXPECT-- bool(false) object(CV\VideoCapture)#1 (0) { -} -bool(true) \ No newline at end of file +} \ No newline at end of file