Skip to content

Commit 27fece5

Browse files
committed
Merge branch 'master' into dev
2 parents a59dea7 + 9d1225f commit 27fece5

File tree

6 files changed

+477
-3
lines changed

6 files changed

+477
-3
lines changed

opencv.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,12 @@ const zend_function_entry opencv_functions[] = {
222222
ZEND_NS_NAMED_FE(OPENCV_NS, bilateralFilter, ZEND_FN(opencv_bilateral_filter), opencv_bilateral_filter_arginfo)
223223
ZEND_NS_NAMED_FE(OPENCV_NS, dilate, ZEND_FN(opencv_dilate), opencv_dilate_arginfo)
224224
ZEND_NS_NAMED_FE(OPENCV_NS, erode, ZEND_FN(opencv_erode), opencv_erode_arginfo)
225+
ZEND_NS_NAMED_FE(OPENCV_NS, filter2D, ZEND_FN(opencv_filter2D), opencv_filter2D_arginfo)
226+
ZEND_NS_NAMED_FE(OPENCV_NS, Sobel, ZEND_FN(opencv_sobel), opencv_sobel_arginfo)
227+
ZEND_NS_NAMED_FE(OPENCV_NS, Scharr, ZEND_FN(opencv_scharr), opencv_scharr_arginfo)
228+
ZEND_NS_NAMED_FE(OPENCV_NS, Laplacian, ZEND_FN(opencv_laplacian), opencv_laplacian_arginfo)
229+
ZEND_NS_NAMED_FE(OPENCV_NS, convertScaleAbs, ZEND_FN(opencv_convert_scale_abs), opencv_convert_scale_abs_arginfo)
230+
ZEND_NS_NAMED_FE(OPENCV_NS, getStructuringElement, ZEND_FN(opencv_get_structuring_element), opencv_get_structuring_element_arginfo)
225231
ZEND_NS_NAMED_FE(OPENCV_NS, threshold, ZEND_FN(opencv_threshold), opencv_threshold_arginfo)
226232
PHP_FE_END /* Must be the last line in opencv_functions[] */
227233
};

source/opencv2/core/opencv_mat.cc

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,24 @@ PHP_METHOD(opencv_mat, empty)
128128
RETURN_LONG(obj->mat->empty());
129129
}
130130

131+
PHP_METHOD(opencv_mat, ones)
132+
{
133+
long rows, cols, flags;
134+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &rows, &cols, &flags) == FAILURE) {
135+
RETURN_NULL();
136+
}
137+
zval instance;
138+
object_init_ex(&instance, opencv_mat_ce);
139+
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(&instance);
140+
141+
Mat im = Mat::ones((int)rows, (int)cols, (int)flags);
142+
143+
obj->mat=new Mat(im);
144+
//update php Mat object property
145+
opencv_mat_update_property_by_c_mat(&instance, obj->mat);
146+
147+
RETURN_ZVAL(&instance,0,0); //return php Mat object
148+
}
131149

132150
PHP_METHOD(opencv_mat, zeros)
133151
{
@@ -432,6 +450,53 @@ PHP_METHOD(opencv_mat, size)
432450
RETURN_ZVAL(&instance,0,0);
433451
}
434452

453+
/**
454+
* Mat->plus()
455+
* @param execute_data
456+
* @param return_value
457+
*/
458+
PHP_METHOD(opencv_mat, plus)
459+
{
460+
zval instance;
461+
double number=1;
462+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "d", &number) == FAILURE) {
463+
RETURN_NULL();
464+
}
465+
466+
object_init_ex(&instance, opencv_mat_ce);
467+
468+
opencv_mat_object *new_obj = Z_PHP_MAT_OBJ_P(&instance);
469+
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
470+
new_obj->mat=new Mat(*(obj->mat)*number);
471+
472+
opencv_mat_update_property_by_c_mat(&instance, new_obj->mat);
473+
474+
RETURN_ZVAL(&instance,0,0); //return php Mat object
475+
}
476+
477+
/**
478+
* Mat->divide()
479+
* @param execute_data
480+
* @param return_value
481+
*/
482+
PHP_METHOD(opencv_mat, divide)
483+
{
484+
zval instance;
485+
double number=1;
486+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "d", &number) == FAILURE) {
487+
RETURN_NULL();
488+
}
489+
490+
object_init_ex(&instance, opencv_mat_ce);
491+
492+
opencv_mat_object *new_obj = Z_PHP_MAT_OBJ_P(&instance);
493+
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
494+
new_obj->mat=new Mat(*(obj->mat)/number);
495+
496+
opencv_mat_update_property_by_c_mat(&instance, new_obj->mat);
497+
498+
RETURN_ZVAL(&instance,0,0); //return php Mat object
499+
}
435500

436501
/**
437502
* opencv_mat_methods[]
@@ -445,6 +510,7 @@ const zend_function_entry opencv_mat_methods[] = {
445510
PHP_ME(opencv_mat, print, NULL, ZEND_ACC_PUBLIC)
446511
PHP_ME(opencv_mat, size, NULL, ZEND_ACC_PUBLIC)
447512
PHP_ME(opencv_mat, clone, NULL, ZEND_ACC_PUBLIC)
513+
PHP_ME(opencv_mat, ones, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
448514
PHP_ME(opencv_mat, zeros, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
449515
PHP_MALIAS(opencv_mat, zerosBySize ,zeros_by_size, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
450516
PHP_MALIAS(opencv_mat, isContinuous ,is_continuous, NULL, ZEND_ACC_PUBLIC)
@@ -455,6 +521,8 @@ const zend_function_entry opencv_mat_methods[] = {
455521
PHP_MALIAS(opencv_mat, getImageROI ,get_image_roi, NULL, ZEND_ACC_PUBLIC)
456522
PHP_MALIAS(opencv_mat, copyTo ,copy_to, opencv_mat_copy_to_arginfo, ZEND_ACC_PUBLIC)
457523
PHP_MALIAS(opencv_mat, convertTo ,convert_to, opencv_mat_convert_to_arginfo, ZEND_ACC_PUBLIC)
524+
PHP_ME(opencv_mat, plus, NULL, ZEND_ACC_PUBLIC)
525+
PHP_ME(opencv_mat, divide, NULL, ZEND_ACC_PUBLIC)
458526
PHP_FE_END
459527
};
460528
/* }}} */

source/opencv2/opencv_imgproc.cc

Lines changed: 260 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ PHP_FUNCTION(opencv_cv_t_color){
5656
RETURN_ZVAL(&instance,0,0); //return php Mat object
5757
}
5858

59+
5960
/**
6061
* CV\ellipse
6162
* @param CV\Mat $img, Mat of original picture
@@ -462,7 +463,7 @@ PHP_FUNCTION(opencv_gaussian_blur){
462463
&src_zval, opencv_mat_ce,
463464
&dst_zval,
464465
&ksize_zval, opencv_size_ce,
465-
&sigma_x, sigma_y,
466+
&sigma_x, &sigma_y,
466467
&border_type) == FAILURE) {
467468
RETURN_NULL();
468469
}
@@ -676,6 +677,263 @@ PHP_FUNCTION(opencv_threshold){
676677
RETURN_DOUBLE(threshold(*src_object->mat, *dst_object->mat, thresh, maxval, (int)type));
677678
}
678679

680+
/**
681+
* CV\sobel
682+
* @param execute_data
683+
* @param return_value
684+
*/
685+
PHP_FUNCTION(opencv_sobel){
686+
687+
zval *src_zval, *dst_zval;
688+
long ddepth,dx,dy;
689+
long ksize=3;
690+
691+
double delta = 0.0,scale=1.0;
692+
long border_type = BORDER_DEFAULT;
693+
opencv_mat_object *dst_object;
694+
695+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozlll|lddl",
696+
&src_zval, opencv_mat_ce,
697+
&dst_zval,
698+
&ddepth,
699+
&dx,
700+
&dy,
701+
&ksize,
702+
&scale,
703+
&delta,
704+
&border_type) == FAILURE) {
705+
RETURN_NULL();
706+
}
707+
708+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
709+
710+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
711+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
712+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
713+
} else{
714+
zval_ptr_dtor(dst_real_zval);
715+
zval instance;
716+
Mat dst;
717+
object_init_ex(&instance,opencv_mat_ce);
718+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
719+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
720+
dst_object->mat = new Mat(dst);
721+
}
722+
Sobel(*src_object->mat, *dst_object->mat, (int)ddepth, (int)dx, (int)dy, (int)ksize, (double)scale, (double)delta, (int)border_type);
723+
RETURN_NULL();
724+
}
725+
726+
/**
727+
* CV\Scharr
728+
* @param execute_data
729+
* @param return_value
730+
*/
731+
PHP_FUNCTION(opencv_scharr){
732+
733+
zval *src_zval, *dst_zval;
734+
long ddepth,dx,dy;
735+
736+
double delta = 0.0,scale=1.0;
737+
long border_type = BORDER_DEFAULT;
738+
opencv_mat_object *dst_object;
739+
740+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozlll|ddl",
741+
&src_zval, opencv_mat_ce,
742+
&dst_zval,
743+
&ddepth,
744+
&dx,
745+
&dy,
746+
&scale,
747+
&delta,
748+
&border_type) == FAILURE) {
749+
RETURN_NULL();
750+
}
751+
752+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
753+
754+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
755+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
756+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
757+
} else{
758+
zval_ptr_dtor(dst_real_zval);
759+
zval instance;
760+
Mat dst;
761+
object_init_ex(&instance,opencv_mat_ce);
762+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
763+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
764+
dst_object->mat = new Mat(dst);
765+
}
766+
Scharr(*src_object->mat, *dst_object->mat, (int)ddepth, (int)dx, (int)dy, (double)scale, (double)delta, (int)border_type);
767+
RETURN_NULL();
768+
}
769+
770+
/**
771+
* CV\laplacian
772+
* @param execute_data
773+
* @param return_value
774+
*/
775+
PHP_FUNCTION(opencv_laplacian){
776+
777+
zval *src_zval, *dst_zval;
778+
long ddepth;
779+
long ksize=3;
780+
781+
double delta = 0.0,scale=1.0;
782+
long border_type = BORDER_DEFAULT;
783+
opencv_mat_object *dst_object;
784+
785+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozl|lddl",
786+
&src_zval, opencv_mat_ce,
787+
&dst_zval,
788+
&ddepth,
789+
&ksize,
790+
&scale,
791+
&delta,
792+
&border_type) == FAILURE) {
793+
RETURN_NULL();
794+
}
795+
796+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
797+
798+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
799+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
800+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
801+
} else{
802+
zval_ptr_dtor(dst_real_zval);
803+
zval instance;
804+
Mat dst;
805+
object_init_ex(&instance,opencv_mat_ce);
806+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
807+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
808+
dst_object->mat = new Mat(dst);
809+
}
810+
Laplacian(*src_object->mat, *dst_object->mat, (int)ddepth, (int)ksize, (double)scale, (double)delta, (int)border_type);
811+
RETURN_NULL();
812+
}
813+
814+
/**
815+
* CV\filter2D
816+
* @param execute_data
817+
* @param return_value
818+
*/
819+
PHP_FUNCTION(opencv_filter2D){
820+
821+
zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL;
822+
long ddepth;
823+
Point anchor = Point(-1,-1);
824+
double delta = 0.0;
825+
long border_type = BORDER_DEFAULT;
826+
opencv_mat_object *dst_object;
827+
828+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzlO|Odl",
829+
&src_zval, opencv_mat_ce,
830+
&dst_zval,
831+
&ddepth,
832+
&kernel_zval, opencv_mat_ce,
833+
&anchor_zval, opencv_point_ce,
834+
&delta,
835+
&border_type) == FAILURE) {
836+
RETURN_NULL();
837+
}
838+
839+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
840+
opencv_mat_object *kernel_object = Z_PHP_MAT_OBJ_P(kernel_zval);
841+
if(anchor_zval != NULL){
842+
opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P(anchor_zval);
843+
anchor = *anchor_object->point;
844+
}
845+
846+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
847+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
848+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
849+
} else{
850+
zval_ptr_dtor(dst_real_zval);
851+
zval instance;
852+
Mat dst;
853+
object_init_ex(&instance,opencv_mat_ce);
854+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
855+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
856+
dst_object->mat = new Mat(dst);
857+
}
858+
filter2D(*src_object->mat, *dst_object->mat, (int)ddepth, *kernel_object->mat, anchor, delta, (int)border_type);
859+
RETURN_NULL();
860+
}
861+
862+
/**
863+
* CV\convertScaleAbs
864+
* @param execute_data
865+
* @param return_value
866+
*/
867+
PHP_FUNCTION(opencv_convert_scale_abs){
868+
869+
zval *src_zval, *dst_zval;
870+
double alpha = 1.0;
871+
double beta = 0.0;
872+
873+
opencv_mat_object *dst_object;
874+
875+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|dd",
876+
&src_zval, opencv_mat_ce,
877+
&dst_zval,
878+
&alpha,
879+
&beta) == FAILURE) {
880+
RETURN_NULL();
881+
}
882+
883+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
884+
885+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
886+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
887+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
888+
} else{
889+
zval_ptr_dtor(dst_real_zval);
890+
zval instance;
891+
Mat dst;
892+
object_init_ex(&instance,opencv_mat_ce);
893+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
894+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
895+
dst_object->mat = new Mat(dst);
896+
}
897+
convertScaleAbs(*src_object->mat, *dst_object->mat, (double)alpha, (double)beta);
898+
RETURN_NULL();
899+
}
900+
901+
/**
902+
* CV\getStructuringElement
903+
* @param execute_data
904+
* @param return_value
905+
*/
906+
PHP_FUNCTION(opencv_get_structuring_element){
907+
long shape;
908+
zval *ksize_zval, *anchor_zval = NULL;
909+
Point anchor = Point(-1,-1);
910+
opencv_mat_object *dst_object;
911+
Mat dst;
912+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lO|O",
913+
&shape,
914+
&ksize_zval, opencv_size_ce,
915+
&anchor_zval, opencv_point_ce) == FAILURE) {
916+
RETURN_NULL();
917+
}
918+
919+
opencv_size_object *ksize_object = Z_PHP_SIZE_OBJ_P(ksize_zval);
920+
if(anchor_zval != NULL){
921+
opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P(anchor_zval);
922+
anchor = *anchor_object->point;
923+
}
924+
925+
dst = getStructuringElement((int)shape, *ksize_object->size, anchor);
926+
927+
zval instance;
928+
object_init_ex(&instance,opencv_mat_ce);
929+
opencv_mat_object *dst_obj = Z_PHP_MAT_OBJ_P(&instance);
930+
931+
dst_obj->mat=new Mat(dst);
932+
opencv_mat_update_property_by_c_mat(&instance,dst_obj->mat);
933+
934+
RETURN_ZVAL(&instance,0,0); //return php Mat object
935+
}
936+
679937
/**
680938
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
681939
* @param module_number
@@ -940,4 +1198,4 @@ void opencv_line_type_init(int module_number){
9401198
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "LINE_4", LINE_4, CONST_CS | CONST_PERSISTENT);
9411199
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "LINE_8", LINE_8, CONST_CS | CONST_PERSISTENT);
9421200
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "LINE_AA", LINE_AA, CONST_CS | CONST_PERSISTENT);
943-
}
1201+
}

0 commit comments

Comments
 (0)