opencv 4.0.1 support + pull from hihozhou
Esse commit está contido em:
+6
-6
@@ -66,19 +66,19 @@ if test "$PHP_OPENCV" != "no"; then
|
|||||||
if test -f "$PKG_CONFIG"; then
|
if test -f "$PKG_CONFIG"; then
|
||||||
AC_MSG_RESULT(found)
|
AC_MSG_RESULT(found)
|
||||||
AC_MSG_CHECKING(for opencv)
|
AC_MSG_CHECKING(for opencv)
|
||||||
if $PKG_CONFIG --exists opencv; then
|
if $PKG_CONFIG --exists opencv4; then
|
||||||
if $PKG_CONFIG --atleast-version=3.3.0 opencv; then
|
if $PKG_CONFIG --atleast-version=4.0.0 opencv4; then
|
||||||
opencv_version=`$PKG_CONFIG --modversion opencv`
|
opencv_version=`$PKG_CONFIG --modversion opencv4`
|
||||||
AC_MSG_RESULT([found $opencv_version])
|
AC_MSG_RESULT([found $opencv_version])
|
||||||
dnl Add c++ opencv libs and includes by pkg-config
|
dnl Add c++ opencv libs and includes by pkg-config
|
||||||
OPENCV_LIBS=`$PKG_CONFIG --libs opencv`
|
OPENCV_LIBS=`$PKG_CONFIG --libs opencv4`
|
||||||
OPENCV_INCS=`$PKG_CONFIG --cflags opencv`
|
OPENCV_INCS=`$PKG_CONFIG --cflags opencv4`
|
||||||
PHP_EVAL_INCLINE($OPENCV_INCS)
|
PHP_EVAL_INCLINE($OPENCV_INCS)
|
||||||
PHP_EVAL_LIBLINE($OPENCV_LIBS, OPENCV_SHARED_LIBADD)
|
PHP_EVAL_LIBLINE($OPENCV_LIBS, OPENCV_SHARED_LIBADD)
|
||||||
AC_DEFINE(HAVE_OPENCV, 1, [whether opencv exists in the system])
|
AC_DEFINE(HAVE_OPENCV, 1, [whether opencv exists in the system])
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(too old)
|
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
|
fi
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(not found)
|
AC_MSG_RESULT(not found)
|
||||||
|
|||||||
@@ -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_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_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_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_8UC1", CV_8UC1, CONST_CS | CONST_PERSISTENT);
|
||||||
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_8UC2", CV_8UC2, CONST_CS | CONST_PERSISTENT);
|
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_8UC2", CV_8UC2, CONST_CS | CONST_PERSISTENT);
|
||||||
|
|||||||
@@ -196,8 +196,12 @@ PHP_METHOD(opencv_mat, print)
|
|||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &type) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &type) == FAILURE) {
|
||||||
RETURN_NULL();
|
RETURN_NULL();
|
||||||
}
|
}
|
||||||
|
|
||||||
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
|
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<cv::Formatter::FormatType>((int)type);
|
||||||
|
std::cout << format(*(obj->mat), formatType) << std::endl;
|
||||||
|
|
||||||
RETURN_NULL();
|
RETURN_NULL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -690,11 +690,33 @@ PHP_METHOD(opencv_rotated_rect, __construct)
|
|||||||
opencv_rotated_rect_update_property_by_c_rotated_rect(getThis(), obj->rotatedRect);
|
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[]
|
* opencv_rect_methods[]
|
||||||
*/
|
*/
|
||||||
const zend_function_entry opencv_rotated_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, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||||
|
PHP_ME(opencv_rotated_rect, points, NULL, ZEND_ACC_PUBLIC)
|
||||||
PHP_FE_END
|
PHP_FE_END
|
||||||
};
|
};
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ void opencv_lbph_face_recognizer_free_obj(zend_object *object)
|
|||||||
{
|
{
|
||||||
opencv_lbph_face_recognizer_object *obj;
|
opencv_lbph_face_recognizer_object *obj;
|
||||||
obj = get_lbph_face_recognizer_obj(object);
|
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);
|
zend_object_std_dtor(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
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
|
//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_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_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_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_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_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_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_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_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_ITALIC", FONT_ITALIC, CONST_CS | CONST_PERSISTENT);
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
void opencv_core_init(int module_number)
|
void opencv_core_init(int module_number)
|
||||||
@@ -80,7 +81,7 @@ void opencv_core_init(int module_number)
|
|||||||
opencv_formatter_init();
|
opencv_formatter_init();
|
||||||
opencv_formatter_const_init(module_number);
|
opencv_formatter_const_init(module_number);
|
||||||
opencv_norm_types_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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1295,6 +1295,264 @@ PHP_FUNCTION(opencv_bounding_rect){
|
|||||||
RETURN_ZVAL(&instance,0,0); //return php Rect object
|
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<cv::Point2f> 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
|
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
|
||||||
* @param module_number
|
* @param module_number
|
||||||
|
|||||||
@@ -247,6 +247,44 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_draw_contours_arginfo, 0, 0, 9)
|
|||||||
ZEND_END_ARG_INFO()
|
ZEND_END_ARG_INFO()
|
||||||
PHP_FUNCTION(opencv_draw_contours);
|
PHP_FUNCTION(opencv_draw_contours);
|
||||||
PHP_FUNCTION(opencv_bounding_rect);
|
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
|
#endif //OPENCV_OPENCV_IMGPROC_H
|
||||||
|
|||||||
@@ -175,10 +175,10 @@ void opencv_cascade_classifier_init(int module_number){
|
|||||||
void opencv_objdetect_constants_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_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_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_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_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_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);
|
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CASCADE_SCALE_IMAGE", CASCADE_SCALE_IMAGE, CONST_CS | CONST_PERSISTENT);
|
||||||
|
|||||||
@@ -8,13 +8,11 @@ use CV\VideoCapture;
|
|||||||
|
|
||||||
$video=new VideoCapture();
|
$video=new VideoCapture();
|
||||||
var_dump($video->isOpened());
|
var_dump($video->isOpened());
|
||||||
$video->open(0);
|
//$video->open(0);
|
||||||
var_dump($video);
|
var_dump($video);
|
||||||
var_dump($video->isOpened());
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
--EXPECT--
|
||||||
bool(false)
|
bool(false)
|
||||||
object(CV\VideoCapture)#1 (0) {
|
object(CV\VideoCapture)#1 (0) {
|
||||||
}
|
}
|
||||||
bool(true)
|
|
||||||
Referência em uma Nova Issue
Bloquear um usuário