Skip to content

Commit 510ce1d

Browse files
committed
Merge branch 'dev'
2 parents 1040461 + 15b1543 commit 510ce1d

File tree

7 files changed

+111
-6
lines changed

7 files changed

+111
-6
lines changed

opencv.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ const zend_function_entry opencv_functions[] = {
217217
ZEND_NS_NAMED_FE(OPENCV_NS, blur, ZEND_FN(opencv_blur), opencv_blur_arginfo)
218218
ZEND_NS_NAMED_FE(OPENCV_NS, GaussianBlur, ZEND_FN(opencv_gaussian_blur), opencv_gaussian_blur_arginfo)
219219
ZEND_NS_NAMED_FE(OPENCV_NS, medianBlur, ZEND_FN(opencv_median_blur), opencv_median_blur_arginfo)
220+
ZEND_NS_NAMED_FE(OPENCV_NS, bilateralFilter, ZEND_FN(opencv_bilateral_filter), opencv_bilateral_filter_arginfo)
220221
PHP_FE_END /* Must be the last line in opencv_functions[] */
221222
};
222223
/* }}} */

source/opencv2/core/opencv_mat.cc

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ PHP_METHOD(opencv_mat, empty)
131131

132132
PHP_METHOD(opencv_mat, zeros)
133133
{
134-
long rows, cols, flags = IMREAD_COLOR;
135-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|l", &rows, &cols, &flags) == FAILURE) {
134+
long rows, cols, flags;
135+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &rows, &cols, &flags) == FAILURE) {
136136
RETURN_NULL();
137137
}
138138
zval instance;
@@ -148,6 +148,27 @@ PHP_METHOD(opencv_mat, zeros)
148148
RETURN_ZVAL(&instance,0,0); //return php Mat object
149149
}
150150

151+
PHP_METHOD(opencv_mat, zeros_by_size)
152+
{
153+
zval *size_zval;
154+
long flags;
155+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &size_zval, opencv_size_ce, &flags) == FAILURE) {
156+
RETURN_NULL();
157+
}
158+
159+
opencv_size_object *size_object = Z_PHP_SIZE_OBJ_P(size_zval);
160+
zval instance;
161+
object_init_ex(&instance, opencv_mat_ce);
162+
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(&instance);
163+
164+
Mat im = Mat::zeros(*size_object->size, (int)flags);
165+
166+
obj->mat=new Mat(im);
167+
opencv_mat_update_property_by_c_mat(&instance, obj->mat);
168+
169+
RETURN_ZVAL(&instance,0,0);
170+
}
171+
151172

152173
/**
153174
* Mat->clone()
@@ -261,7 +282,7 @@ PHP_METHOD(opencv_mat, get_image_roi)
261282
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
262283
try {
263284
Mat roi = (*obj->mat)(*rect_object->rect);
264-
new_obj->mat=new Mat(roi);
285+
new_obj->mat = new Mat(roi);
265286
}catch (Exception exception){
266287
const char* err_msg = exception.what();
267288
opencv_throw_exception(err_msg);//throw exception
@@ -393,6 +414,24 @@ PHP_METHOD(opencv_mat, convert_to){
393414
RETURN_NULL();
394415
}
395416

417+
PHP_METHOD(opencv_mat, size)
418+
{
419+
zval instance;
420+
object_init_ex(&instance, opencv_size_ce);
421+
opencv_size_object *size_object = Z_PHP_SIZE_OBJ_P(&instance);
422+
423+
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
424+
try {
425+
Size size = obj->mat->size();
426+
size_object->size = new Size(size);
427+
}catch (Exception e){
428+
opencv_throw_exception(e.what());
429+
RETURN_NULL();
430+
}
431+
opencv_size_update_property_by_c_size(&instance, size_object->size);
432+
RETURN_ZVAL(&instance,0,0);
433+
}
434+
396435

397436
/**
398437
* opencv_mat_methods[]
@@ -404,7 +443,10 @@ const zend_function_entry opencv_mat_methods[] = {
404443
PHP_ME(opencv_mat, channels, NULL, ZEND_ACC_PUBLIC)
405444
PHP_ME(opencv_mat, empty, NULL, ZEND_ACC_PUBLIC)
406445
PHP_ME(opencv_mat, print, NULL, ZEND_ACC_PUBLIC)
446+
PHP_ME(opencv_mat, size, NULL, ZEND_ACC_PUBLIC)
447+
PHP_ME(opencv_mat, clone, NULL, ZEND_ACC_PUBLIC)
407448
PHP_ME(opencv_mat, zeros, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
449+
PHP_MALIAS(opencv_mat, zerosBySize ,zeros_by_size, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
408450
PHP_MALIAS(opencv_mat, isContinuous ,is_continuous, NULL, ZEND_ACC_PUBLIC)
409451
PHP_MALIAS(opencv_mat, isSubmatrix ,is_submatrix, NULL, ZEND_ACC_PUBLIC)
410452
PHP_ME(opencv_mat, row, NULL, ZEND_ACC_PUBLIC)

source/opencv2/core/opencv_type.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,11 @@ void opencv_size_free_obj(zend_object *object)
272272
zend_object_std_dtor(object);
273273
}
274274

275+
void opencv_size_update_property_by_c_size(zval *z, Size *size){
276+
zend_update_property_long(opencv_size_ce, z, "width", sizeof("width")-1, size->width);
277+
zend_update_property_long(opencv_size_ce, z, "height", sizeof("height")-1, size->height);
278+
}
279+
275280

276281
/**
277282
* Size __construct
@@ -287,9 +292,7 @@ PHP_METHOD(opencv_size, __construct)
287292
opencv_size_object *obj = Z_PHP_SIZE_OBJ_P(getThis());
288293
Size size = Size((int)width, (int)height);
289294
obj->size = new Size(size);
290-
291-
zend_update_property_long(opencv_size_ce, getThis(), "width", sizeof("width")-1, obj->size->width);
292-
zend_update_property_long(opencv_size_ce, getThis(), "height", sizeof("height")-1, obj->size->height);
295+
opencv_size_update_property_by_c_size(getThis(), obj->size);
293296
}
294297

295298

source/opencv2/core/opencv_type.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ static inline opencv_rect_object* get_rect_obj(zend_object *obj) {
7575
return (opencv_rect_object*)((char*)(obj) - XtOffsetOf(opencv_rect_object, std));
7676
}
7777

78+
void opencv_size_update_property_by_c_size(zval *z, Size *size);
79+
7880
void opencv_rect_update_property_by_c_rect(zval *z, Rect *rect);
7981

8082
void opencv_scalar_update_property_by_c_scalar(zval *z,Scalar *scalar);

source/opencv2/opencv_core.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,27 @@ void opencv_norm_types_const_init(int module_number){
6363
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "NORM_MINMAX", NORM_MINMAX, CONST_CS | CONST_PERSISTENT);
6464
}
6565

66+
void opencv_hershey_fonts_const_init(int module_number){
67+
68+
//cv::HersheyFonts
69+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SIMPLEX", FONT_HERSHEY_SIMPLEX, CONST_CS | CONST_PERSISTENT);
70+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_PLAIN", FONT_HERSHEY_PLAIN, CONST_CS | CONST_PERSISTENT);
71+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_DUPLEX", FONT_HERSHEY_DUPLEX, CONST_CS | CONST_PERSISTENT);
72+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_COMPLEX", FONT_HERSHEY_COMPLEX, CONST_CS | CONST_PERSISTENT);
73+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_TRIPLEX", FONT_HERSHEY_TRIPLEX, CONST_CS | CONST_PERSISTENT);
74+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_COMPLEX_SMALL", FONT_HERSHEY_COMPLEX_SMALL, CONST_CS | CONST_PERSISTENT);
75+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SCRIPT_SIMPLEX", FONT_HERSHEY_SCRIPT_SIMPLEX, CONST_CS | CONST_PERSISTENT);
76+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_HERSHEY_SCRIPT_COMPLEX", FONT_HERSHEY_SCRIPT_COMPLEX, CONST_CS | CONST_PERSISTENT);
77+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "FONT_ITALIC", FONT_ITALIC, CONST_CS | CONST_PERSISTENT);
78+
}
79+
6680

6781
void opencv_core_init(int module_number)
6882
{
6983
opencv_formatter_init();
7084
opencv_formatter_const_init(module_number);
7185
opencv_norm_types_const_init(module_number);
86+
opencv_hershey_fonts_const_init(module_number);
7287
}
7388

7489

source/opencv2/opencv_imgproc.cc

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,39 @@ PHP_FUNCTION(opencv_median_blur){
439439
RETURN_NULL();
440440
}
441441

442+
PHP_FUNCTION(opencv_bilateral_filter){
443+
444+
zval *src_zval, *dst_zval;
445+
long d, border_type = BORDER_DEFAULT;
446+
double sigma_color, sigma_space;
447+
opencv_mat_object *dst_object;
448+
449+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozldd|l",
450+
&src_zval, opencv_mat_ce,
451+
&dst_zval, &d, &sigma_color,
452+
&sigma_space, &border_type) == FAILURE) {
453+
RETURN_NULL();
454+
}
455+
456+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
457+
458+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
459+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
460+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
461+
} else{
462+
zval_ptr_dtor(dst_real_zval);
463+
zval instance;
464+
Mat dst;
465+
object_init_ex(&instance,opencv_mat_ce);
466+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
467+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
468+
dst_object->mat = new Mat(dst);
469+
}
470+
bilateralFilter(*src_object->mat, *dst_object->mat, (int)d, sigma_color, sigma_space, (int)border_type);
471+
RETURN_NULL();
472+
}
473+
474+
442475
/**
443476
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
444477
* @param module_number

source/opencv2/opencv_imgproc.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,14 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_median_blur_arginfo, 0, 0, 3)
6969
ZEND_ARG_INFO(0, ksize)
7070
ZEND_END_ARG_INFO()
7171
PHP_FUNCTION(opencv_median_blur);
72+
ZEND_BEGIN_ARG_INFO_EX(opencv_bilateral_filter_arginfo, 0, 0, 6)
73+
ZEND_ARG_INFO(0, src)
74+
ZEND_ARG_INFO(1, dst)
75+
ZEND_ARG_INFO(0, d)
76+
ZEND_ARG_INFO(0, sigmaColor)
77+
ZEND_ARG_INFO(0, sigmaSpace)
78+
ZEND_ARG_INFO(0, borderType)
79+
ZEND_END_ARG_INFO()
80+
PHP_FUNCTION(opencv_bilateral_filter);
7281

7382
#endif //OPENCV_OPENCV_IMGPROC_H

0 commit comments

Comments
 (0)