Skip to content

Commit 9d1225f

Browse files
authored
Merge pull request #10 from MaleicAcid/master
add Mat->plus() ,add Mat->divide() ,update mat.phpt, add CV\filter2D, add CV\Sobel, add CV\Scharr, add CV\Laplacian, add CV\convertScaleAbs
2 parents dc2819c + 0128aea commit 9d1225f

File tree

5 files changed

+356
-2
lines changed

5 files changed

+356
-2
lines changed

opencv.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,11 @@ 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)
225230
ZEND_NS_NAMED_FE(OPENCV_NS, getStructuringElement, ZEND_FN(opencv_get_structuring_element), opencv_get_structuring_element_arginfo)
226231
ZEND_NS_NAMED_FE(OPENCV_NS, threshold, ZEND_FN(opencv_threshold), opencv_threshold_arginfo)
227232
PHP_FE_END /* Must be the last line in opencv_functions[] */

source/opencv2/core/opencv_mat.cc

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,53 @@ PHP_METHOD(opencv_mat, size)
450450
RETURN_ZVAL(&instance,0,0);
451451
}
452452

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+
}
453500

454501
/**
455502
* opencv_mat_methods[]
@@ -474,6 +521,8 @@ const zend_function_entry opencv_mat_methods[] = {
474521
PHP_MALIAS(opencv_mat, getImageROI ,get_image_roi, NULL, ZEND_ACC_PUBLIC)
475522
PHP_MALIAS(opencv_mat, copyTo ,copy_to, opencv_mat_copy_to_arginfo, ZEND_ACC_PUBLIC)
476523
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)
477526
PHP_FE_END
478527
};
479528
/* }}} */

source/opencv2/opencv_imgproc.cc

Lines changed: 222 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ PHP_FUNCTION(opencv_gaussian_blur){
463463
&src_zval, opencv_mat_ce,
464464
&dst_zval,
465465
&ksize_zval, opencv_size_ce,
466-
&sigma_x, sigma_y,
466+
&sigma_x, &sigma_y,
467467
&border_type) == FAILURE) {
468468
RETURN_NULL();
469469
}
@@ -677,6 +677,227 @@ PHP_FUNCTION(opencv_threshold){
677677
RETURN_DOUBLE(threshold(*src_object->mat, *dst_object->mat, thresh, maxval, (int)type));
678678
}
679679

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+
680901
/**
681902
* CV\getStructuringElement
682903
* @param execute_data

source/opencv2/opencv_imgproc.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,61 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_erode_arginfo, 0, 0, 7)
111111
ZEND_END_ARG_INFO()
112112
PHP_FUNCTION(opencv_erode);
113113

114+
ZEND_BEGIN_ARG_INFO_EX(opencv_filter2D_arginfo, 0, 0, 7)
115+
ZEND_ARG_INFO(0, src)
116+
ZEND_ARG_INFO(1, dst)
117+
ZEND_ARG_INFO(0, ddepth)
118+
ZEND_ARG_INFO(0, kernel)
119+
ZEND_ARG_INFO(0, anchor)
120+
ZEND_ARG_INFO(0, delta)
121+
ZEND_ARG_INFO(0, border_type)
122+
ZEND_END_ARG_INFO()
123+
PHP_FUNCTION(opencv_filter2D);
124+
125+
ZEND_BEGIN_ARG_INFO_EX(opencv_sobel_arginfo, 0, 0, 9)
126+
ZEND_ARG_INFO(0, src)
127+
ZEND_ARG_INFO(1, dst)
128+
ZEND_ARG_INFO(0, ddepth)
129+
ZEND_ARG_INFO(0, dx)
130+
ZEND_ARG_INFO(0, dy)
131+
ZEND_ARG_INFO(0, ksize)
132+
ZEND_ARG_INFO(0, scale)
133+
ZEND_ARG_INFO(0, delta)
134+
ZEND_ARG_INFO(0, border_type)
135+
ZEND_END_ARG_INFO()
136+
PHP_FUNCTION(opencv_sobel);
137+
138+
ZEND_BEGIN_ARG_INFO_EX(opencv_scharr_arginfo, 0, 0, 8)
139+
ZEND_ARG_INFO(0, src)
140+
ZEND_ARG_INFO(1, dst)
141+
ZEND_ARG_INFO(0, ddepth)
142+
ZEND_ARG_INFO(0, dx)
143+
ZEND_ARG_INFO(0, dy)
144+
ZEND_ARG_INFO(0, scale)
145+
ZEND_ARG_INFO(0, delta)
146+
ZEND_ARG_INFO(0, border_type)
147+
ZEND_END_ARG_INFO()
148+
PHP_FUNCTION(opencv_scharr);
149+
150+
ZEND_BEGIN_ARG_INFO_EX(opencv_laplacian_arginfo, 0, 0, 7)
151+
ZEND_ARG_INFO(0, src)
152+
ZEND_ARG_INFO(1, dst)
153+
ZEND_ARG_INFO(0, ddepth)
154+
ZEND_ARG_INFO(0, ksize)
155+
ZEND_ARG_INFO(0, scale)
156+
ZEND_ARG_INFO(0, delta)
157+
ZEND_ARG_INFO(0, border_type)
158+
ZEND_END_ARG_INFO()
159+
PHP_FUNCTION(opencv_laplacian);
160+
161+
ZEND_BEGIN_ARG_INFO_EX(opencv_convert_scale_abs_arginfo, 0, 0, 4)
162+
ZEND_ARG_INFO(0, src)
163+
ZEND_ARG_INFO(1, dst)
164+
ZEND_ARG_INFO(0, alpha)
165+
ZEND_ARG_INFO(0, beta)
166+
ZEND_END_ARG_INFO()
167+
PHP_FUNCTION(opencv_convert_scale_abs);
168+
114169
ZEND_BEGIN_ARG_INFO_EX(opencv_get_structuring_element_arginfo, 0, 0, 3)
115170
ZEND_ARG_INFO(0, shape)
116171
ZEND_ARG_INFO(0, ksize)

0 commit comments

Comments
 (0)