Skip to content

Commit e0a68fc

Browse files
committed
Merge branch 'dev'
2 parents 03d93b3 + 2f19011 commit e0a68fc

File tree

4 files changed

+130
-7
lines changed

4 files changed

+130
-7
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,10 @@ result:
139139
- 19.Videostab
140140

141141

142-
142+
## Contributors
143+
144+
[@hihozhou](https://github.com/hihozhou)
145+
[@MaleicAcid](https://github.com/MaleicAcid)
143146

144147
## 感谢
145148

opencv.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,8 @@ const zend_function_entry opencv_functions[] = {
220220
ZEND_NS_NAMED_FE(OPENCV_NS, GaussianBlur, ZEND_FN(opencv_gaussian_blur), opencv_gaussian_blur_arginfo)
221221
ZEND_NS_NAMED_FE(OPENCV_NS, medianBlur, ZEND_FN(opencv_median_blur), opencv_median_blur_arginfo)
222222
ZEND_NS_NAMED_FE(OPENCV_NS, bilateralFilter, ZEND_FN(opencv_bilateral_filter), opencv_bilateral_filter_arginfo)
223+
ZEND_NS_NAMED_FE(OPENCV_NS, dilate, ZEND_FN(opencv_dilate), opencv_dilate_arginfo)
224+
ZEND_NS_NAMED_FE(OPENCV_NS, erode, ZEND_FN(opencv_erode), opencv_erode_arginfo)
223225
PHP_FE_END /* Must be the last line in opencv_functions[] */
224226
};
225227
/* }}} */

source/opencv2/opencv_imgproc.cc

Lines changed: 102 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,28 +118,28 @@ PHP_FUNCTION(opencv_circle){
118118
}
119119

120120
/**
121+
* todo 传入二维数组
121122
* CV\fillPoly
122123
* @param execute_data
123124
* @param return_value
124125
*/
125126
PHP_FUNCTION(opencv_fill_poly){
126127

127-
//define parameters
128-
long ncontours, lineType = LINE_8, shift = 0;
128+
long ncontours = 1, lineType = LINE_8, shift = 0;
129129
zval *img_zval, *color_zval, *offset_point_zval = NULL;
130130
zval *points_zval;
131131
opencv_point_object *offset_object;
132-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OalO|llz",
132+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OaO|llz",
133133
&img_zval, opencv_mat_ce,
134-
&points_zval, &ncontours,
134+
&points_zval,
135135
&color_zval, opencv_scalar_ce,
136136
&lineType, &shift,
137137
&offset_point_zval) == FAILURE) {
138138
RETURN_NULL();
139139
}
140140

141141
unsigned long point_count = zend_hash_num_elements(Z_ARRVAL_P(points_zval));
142-
Point root_points[1][point_count];
142+
Point root_points[ncontours][point_count];
143143
opencv_point_object *point_object;
144144
zend_ulong _h;
145145
zval *array_val_zval;
@@ -157,7 +157,7 @@ PHP_FUNCTION(opencv_fill_poly){
157157
}
158158
}ZEND_HASH_FOREACH_END();
159159

160-
const Point* pts[1] = {root_points[0]};
160+
const Point* pts[ncontours] = {root_points[0]};
161161
int npts[] = {(int)point_count};
162162
Point offset;
163163
zval *offset_point_real_zval;
@@ -547,6 +547,102 @@ PHP_FUNCTION(opencv_bilateral_filter){
547547
}
548548

549549

550+
PHP_FUNCTION(opencv_dilate){
551+
zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL, *border_value_zval = NULL;
552+
long iterations = 1, border_type = BORDER_CONSTANT;
553+
554+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzO|OllO",
555+
&src_zval, opencv_mat_ce,
556+
&dst_zval,
557+
&kernel_zval, opencv_mat_ce,
558+
&anchor_zval, opencv_point_ce,
559+
&iterations, &border_type,
560+
&border_value_zval, opencv_scalar_ce) == FAILURE) {
561+
RETURN_NULL();
562+
}
563+
opencv_mat_object *src_object, *dst_object, *kernel_object;
564+
Point anchor = Point(-1,-1);
565+
Scalar border_value = morphologyDefaultBorderValue();
566+
567+
src_object = Z_PHP_MAT_OBJ_P(src_zval);
568+
kernel_object = Z_PHP_MAT_OBJ_P(kernel_zval);
569+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
570+
571+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
572+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
573+
} else{
574+
zval_ptr_dtor(dst_real_zval);
575+
zval instance;
576+
Mat dst;
577+
object_init_ex(&instance,opencv_mat_ce);
578+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
579+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
580+
dst_object->mat = new Mat(dst);
581+
}
582+
583+
if(anchor_zval != NULL){
584+
opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P(anchor_zval);
585+
anchor = *anchor_object->point;
586+
}
587+
588+
if(border_value_zval != NULL){
589+
opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P(border_value_zval);
590+
border_value = *border_value_object->scalar;
591+
}
592+
593+
dilate(*src_object->mat, *dst_object->mat, *kernel_object->mat, anchor, (int)iterations, (int)border_type, border_value);
594+
RETURN_NULL();
595+
596+
}
597+
598+
PHP_FUNCTION(opencv_erode){
599+
600+
zval *src_zval, *dst_zval, *kernel_zval, *anchor_zval = NULL, *border_value_zval = NULL;
601+
long iterations = 1, border_type = BORDER_CONSTANT;
602+
603+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzO|OllO",
604+
&src_zval, opencv_mat_ce,
605+
&dst_zval,
606+
&kernel_zval, opencv_mat_ce,
607+
&anchor_zval, opencv_point_ce,
608+
&iterations, &border_type,
609+
&border_value_zval, opencv_scalar_ce) == FAILURE) {
610+
RETURN_NULL();
611+
}
612+
opencv_mat_object *src_object, *dst_object, *kernel_object;
613+
Point anchor = Point(-1,-1);
614+
Scalar border_value = morphologyDefaultBorderValue();
615+
616+
src_object = Z_PHP_MAT_OBJ_P(src_zval);
617+
kernel_object = Z_PHP_MAT_OBJ_P(kernel_zval);
618+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
619+
620+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval) == opencv_mat_ce){
621+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
622+
} else{
623+
zval_ptr_dtor(dst_real_zval);
624+
zval instance;
625+
Mat dst;
626+
object_init_ex(&instance,opencv_mat_ce);
627+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
628+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
629+
dst_object->mat = new Mat(dst);
630+
}
631+
632+
if(anchor_zval != NULL){
633+
opencv_point_object *anchor_object = Z_PHP_POINT_OBJ_P(anchor_zval);
634+
anchor = *anchor_object->point;
635+
}
636+
637+
if(border_value_zval != NULL){
638+
opencv_scalar_object *border_value_object = Z_PHP_SCALAR_OBJ_P(border_value_zval);
639+
border_value = *border_value_object->scalar;
640+
}
641+
642+
erode(*src_object->mat, *dst_object->mat, *kernel_object->mat, anchor, (int)iterations, (int)border_type, border_value);
643+
RETURN_NULL();
644+
}
645+
550646
/**
551647
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
552648
* @param module_number

source/opencv2/opencv_imgproc.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,26 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_bilateral_filter_arginfo, 0, 0, 6)
8989
ZEND_END_ARG_INFO()
9090
PHP_FUNCTION(opencv_bilateral_filter);
9191

92+
ZEND_BEGIN_ARG_INFO_EX(opencv_dilate_arginfo, 0, 0, 7)
93+
ZEND_ARG_INFO(0, src)
94+
ZEND_ARG_INFO(1, dst)
95+
ZEND_ARG_INFO(0, kernel)
96+
ZEND_ARG_INFO(0, anchor)
97+
ZEND_ARG_INFO(0, iterations)
98+
ZEND_ARG_INFO(0, borderType)
99+
ZEND_ARG_INFO(0, borderValue)
100+
ZEND_END_ARG_INFO()
101+
PHP_FUNCTION(opencv_dilate);
102+
103+
ZEND_BEGIN_ARG_INFO_EX(opencv_erode_arginfo, 0, 0, 7)
104+
ZEND_ARG_INFO(0, src)
105+
ZEND_ARG_INFO(1, dst)
106+
ZEND_ARG_INFO(0, kernel)
107+
ZEND_ARG_INFO(0, anchor)
108+
ZEND_ARG_INFO(0, iterations)
109+
ZEND_ARG_INFO(0, borderType)
110+
ZEND_ARG_INFO(0, borderValue)
111+
ZEND_END_ARG_INFO()
112+
PHP_FUNCTION(opencv_erode);
113+
92114
#endif //OPENCV_OPENCV_IMGPROC_H

0 commit comments

Comments
 (0)