Skip to content

Commit 1040461

Browse files
committed
Merge branch 'dev'
2 parents 665f750 + 796926a commit 1040461

File tree

6 files changed

+157
-1
lines changed

6 files changed

+157
-1
lines changed

opencv.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ const zend_function_entry opencv_functions[] = {
214214
ZEND_NS_NAMED_FE(OPENCV_NS, putText, ZEND_FN(opencv_put_text), NULL)
215215
ZEND_NS_NAMED_FE(OPENCV_NS, absdiff, ZEND_FN(opencv_absdiff), opencv_absdiff_arginfo)
216216
ZEND_NS_NAMED_FE(OPENCV_NS, getTrackBarPos, ZEND_FN(opencv_get_track_bar_pos), NULL)
217+
ZEND_NS_NAMED_FE(OPENCV_NS, blur, ZEND_FN(opencv_blur), opencv_blur_arginfo)
218+
ZEND_NS_NAMED_FE(OPENCV_NS, GaussianBlur, ZEND_FN(opencv_gaussian_blur), opencv_gaussian_blur_arginfo)
219+
ZEND_NS_NAMED_FE(OPENCV_NS, medianBlur, ZEND_FN(opencv_median_blur), opencv_median_blur_arginfo)
217220
PHP_FE_END /* Must be the last line in opencv_functions[] */
218221
};
219222
/* }}} */

source/opencv2/core/opencv_mat.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ PHP_METHOD(opencv_mat, copy_to)
296296
if(Z_TYPE_P(m_real_zval) == IS_OBJECT && Z_OBJCE_P(m_real_zval)==opencv_mat_ce){
297297
m_object = Z_PHP_MAT_OBJ_P(m_real_zval);
298298
} else if(Z_TYPE_P(m_real_zval) == IS_NULL){
299+
zval_ptr_dtor(m_real_zval);
299300
zval instance;
300301
Mat dst;
301302
object_init_ex(&instance,opencv_mat_ce);
@@ -378,6 +379,7 @@ PHP_METHOD(opencv_mat, convert_to){
378379
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
379380
} else{
380381
// isn't Mat object
382+
zval_ptr_dtor(dst_real_zval);
381383
zval instance;
382384
Mat dst;
383385
object_init_ex(&instance,opencv_mat_ce);

source/opencv2/opencv_core.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ PHP_FUNCTION(opencv_add_weighted){
104104
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
105105
} else{
106106
// isn't Mat object
107+
zval_ptr_dtor(dst_real_zval);
107108
zval instance;
108109
Mat dst;
109110
object_init_ex(&instance,opencv_mat_ce);
@@ -206,6 +207,7 @@ PHP_FUNCTION(opencv_merge){
206207
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
207208
} else{
208209
// isn't Mat object
210+
zval_ptr_dtor(dst_real_zval);
209211
zval instance;
210212
Mat dst;
211213
object_init_ex(&instance,opencv_mat_ce);
@@ -268,6 +270,7 @@ PHP_FUNCTION(opencv_copy_make_border){
268270
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
269271
} else{
270272
// isn't Mat object
273+
zval_ptr_dtor(dst_real_zval);
271274
zval instance;
272275
Mat dst;
273276
object_init_ex(&instance,opencv_mat_ce);
@@ -308,6 +311,7 @@ PHP_FUNCTION(opencv_dft){
308311
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
309312
} else{
310313
// isn't Mat object
314+
zval_ptr_dtor(dst_real_zval);
311315
zval instance;
312316
Mat dst;
313317
object_init_ex(&instance,opencv_mat_ce);
@@ -350,6 +354,7 @@ PHP_FUNCTION(opencv_magnitude){
350354
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
351355
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
352356
} else{
357+
zval_ptr_dtor(dst_real_zval);
353358
zval instance;
354359
Mat dst;
355360
object_init_ex(&instance,opencv_mat_ce);
@@ -517,6 +522,7 @@ PHP_FUNCTION(opencv_add){
517522
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
518523
dst_mat_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
519524
} else{
525+
zval_ptr_dtor(dst_real_zval);
520526
zval instance;
521527
Mat dst;
522528
object_init_ex(&instance,opencv_mat_ce);
@@ -531,6 +537,7 @@ PHP_FUNCTION(opencv_add){
531537
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
532538
dst_mat_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
533539
} else{
540+
zval_ptr_dtor(dst_real_zval);
534541
zval instance;
535542
Mat dst;
536543
object_init_ex(&instance,opencv_mat_ce);
@@ -544,6 +551,7 @@ PHP_FUNCTION(opencv_add){
544551
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
545552
dst_mat_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
546553
} else{
554+
zval_ptr_dtor(dst_real_zval);
547555
zval instance;
548556
Mat dst;
549557
object_init_ex(&instance,opencv_mat_ce);
@@ -592,6 +600,7 @@ PHP_FUNCTION(opencv_log){
592600
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
593601
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
594602
} else{
603+
zval_ptr_dtor(dst_real_zval);
595604
zval instance;
596605
Mat dst;
597606
object_init_ex(&instance,opencv_mat_ce);
@@ -628,6 +637,7 @@ PHP_FUNCTION(opencv_normalize){
628637
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
629638
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
630639
} else{
640+
zval_ptr_dtor(dst_real_zval);
631641
zval instance;
632642
Mat dst;
633643
object_init_ex(&instance,opencv_mat_ce);

source/opencv2/opencv_imgproc.cc

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ PHP_FUNCTION(opencv_equalize_hist){
246246
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
247247
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
248248
} else{
249+
zval_ptr_dtor(dst_real_zval);
249250
zval instance;
250251
Mat dst;
251252
object_init_ex(&instance,opencv_mat_ce);
@@ -282,6 +283,7 @@ PHP_FUNCTION(opencv_resize){
282283
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
283284
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
284285
} else{
286+
zval_ptr_dtor(dst_real_zval);
285287
zval instance;
286288
Mat dst;
287289
object_init_ex(&instance,opencv_mat_ce);
@@ -298,6 +300,11 @@ PHP_FUNCTION(opencv_resize){
298300
RETURN_NULL();
299301
}
300302

303+
/**
304+
* CV\putText
305+
* @param execute_data
306+
* @param return_value
307+
*/
301308
PHP_FUNCTION(opencv_put_text){
302309

303310
zval *img_zval, *org_zval,*color_zval;
@@ -323,6 +330,115 @@ PHP_FUNCTION(opencv_put_text){
323330
putText(*img_object->mat, text, *org_object->point, (int)font_face, (int)font_scale, *color_object->scalar, (int)thickness, (int)line_type, (bool)bottom_left_origin);
324331
}
325332

333+
/**
334+
* CV\blur
335+
* @param execute_data
336+
* @param return_value
337+
*/
338+
PHP_FUNCTION(opencv_blur){
339+
340+
zval *src_zval, *dst_zval, *ksize_zval, *anchor_zval = NULL;
341+
long border_type = BORDER_DEFAULT;
342+
Point anchor = Point(-1,-1);
343+
opencv_mat_object *dst_object;
344+
345+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzO|Ol",
346+
&src_zval, opencv_mat_ce,
347+
&dst_zval,
348+
&ksize_zval, opencv_size_ce,
349+
&anchor_zval, opencv_point_ce,
350+
&border_type) == FAILURE) {
351+
RETURN_NULL();
352+
}
353+
354+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
355+
opencv_size_object *ksize_object = Z_PHP_SIZE_OBJ_P(ksize_zval);
356+
if(anchor_zval != NULL){
357+
opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P(anchor_zval);
358+
anchor = *anchor_object->point;
359+
}
360+
361+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
362+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
363+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
364+
} else{
365+
zval_ptr_dtor(dst_real_zval);
366+
zval instance;
367+
Mat dst;
368+
object_init_ex(&instance,opencv_mat_ce);
369+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
370+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
371+
dst_object->mat = new Mat(dst);
372+
}
373+
blur(*src_object->mat, *dst_object->mat, *ksize_object->size, anchor, (int)border_type);
374+
RETURN_NULL();
375+
}
376+
377+
PHP_FUNCTION(opencv_gaussian_blur){
378+
379+
zval *src_zval, *dst_zval, *ksize_zval;
380+
double sigma_x, sigma_y = 0;
381+
long border_type = BORDER_DEFAULT;
382+
opencv_mat_object *dst_object;
383+
384+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzOd|dl",
385+
&src_zval, opencv_mat_ce,
386+
&dst_zval,
387+
&ksize_zval, opencv_size_ce,
388+
&sigma_x, sigma_y,
389+
&border_type) == FAILURE) {
390+
RETURN_NULL();
391+
}
392+
393+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
394+
opencv_size_object *ksize_object = Z_PHP_SIZE_OBJ_P(ksize_zval);
395+
396+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
397+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
398+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
399+
} else{
400+
zval_ptr_dtor(dst_real_zval);
401+
zval instance;
402+
Mat dst;
403+
object_init_ex(&instance,opencv_mat_ce);
404+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
405+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
406+
dst_object->mat = new Mat(dst);
407+
}
408+
GaussianBlur(*src_object->mat, *dst_object->mat, *ksize_object->size, sigma_x, sigma_y, (int)border_type);
409+
RETURN_NULL();
410+
}
411+
412+
PHP_FUNCTION(opencv_median_blur){
413+
414+
zval *src_zval, *dst_zval;
415+
long ksize;
416+
opencv_mat_object *dst_object;
417+
418+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozl",
419+
&src_zval, opencv_mat_ce,
420+
&dst_zval, &ksize) == FAILURE) {
421+
RETURN_NULL();
422+
}
423+
424+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
425+
426+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
427+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
428+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
429+
} else{
430+
zval_ptr_dtor(dst_real_zval);
431+
zval instance;
432+
Mat dst;
433+
object_init_ex(&instance,opencv_mat_ce);
434+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
435+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
436+
dst_object->mat = new Mat(dst);
437+
}
438+
medianBlur(*src_object->mat, *dst_object->mat, (int)ksize);
439+
RETURN_NULL();
440+
}
441+
326442
/**
327443
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
328444
* @param module_number

source/opencv2/opencv_imgproc.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,28 @@ ZEND_END_ARG_INFO()
4646
PHP_FUNCTION(opencv_resize);
4747
PHP_FUNCTION(opencv_put_text);
4848

49+
ZEND_BEGIN_ARG_INFO_EX(opencv_blur_arginfo, 0, 0, 5)
50+
ZEND_ARG_INFO(0, src)
51+
ZEND_ARG_INFO(1, dst)
52+
ZEND_ARG_INFO(0, ksize)
53+
ZEND_ARG_INFO(0, anchor)
54+
ZEND_ARG_INFO(0, borderType)
55+
ZEND_END_ARG_INFO()
56+
PHP_FUNCTION(opencv_blur);
57+
ZEND_BEGIN_ARG_INFO_EX(opencv_gaussian_blur_arginfo, 0, 0, 6)
58+
ZEND_ARG_INFO(0, src)
59+
ZEND_ARG_INFO(1, dst)
60+
ZEND_ARG_INFO(0, ksize)
61+
ZEND_ARG_INFO(0, sigmaX)
62+
ZEND_ARG_INFO(0, sigmaY)
63+
ZEND_ARG_INFO(0, borderType)
64+
ZEND_END_ARG_INFO()
65+
PHP_FUNCTION(opencv_gaussian_blur);
66+
ZEND_BEGIN_ARG_INFO_EX(opencv_median_blur_arginfo, 0, 0, 3)
67+
ZEND_ARG_INFO(0, src)
68+
ZEND_ARG_INFO(1, dst)
69+
ZEND_ARG_INFO(0, ksize)
70+
ZEND_END_ARG_INFO()
71+
PHP_FUNCTION(opencv_median_blur);
72+
4973
#endif //OPENCV_OPENCV_IMGPROC_H

source/opencv2/opencv_videoio.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,9 @@ PHP_METHOD(opencv_video_capture, read)
163163
if(Z_TYPE_P(mat_real_zval) == IS_OBJECT && Z_OBJCE_P(mat_real_zval)==opencv_mat_ce){
164164
real_object = Z_PHP_MAT_OBJ_P(mat_real_zval);
165165
}else{
166-
zval instance;
167166

167+
zval_ptr_dtor(mat_real_zval);
168+
zval instance;
168169
object_init_ex(&instance,opencv_mat_ce);
169170
ZVAL_COPY_VALUE(mat_real_zval, &instance);// Cover dst_real_zval by Mat object
170171
real_object = Z_PHP_MAT_OBJ_P(mat_real_zval);

0 commit comments

Comments
 (0)