Skip to content

Commit 97a50bf

Browse files
committed
Merge branch 'dev'
2 parents 23a1e63 + c874053 commit 97a50bf

File tree

5 files changed

+82
-3
lines changed

5 files changed

+82
-3
lines changed

opencv.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ const zend_function_entry opencv_functions[] = {
230230
ZEND_NS_NAMED_FE(OPENCV_NS, getStructuringElement, ZEND_FN(opencv_get_structuring_element), opencv_get_structuring_element_arginfo)
231231
ZEND_NS_NAMED_FE(OPENCV_NS, threshold, ZEND_FN(opencv_threshold), opencv_threshold_arginfo)
232232
ZEND_NS_NAMED_FE(OPENCV_NS, morphologyEx, ZEND_FN(opencv_morphology_ex), opencv_morphology_ex_arginfo)
233+
ZEND_NS_NAMED_FE(OPENCV_NS, LUT, ZEND_FN(opencv_lut), opencv_lut_arginfo)
233234
PHP_FE_END /* Must be the last line in opencv_functions[] */
234235
};
235236
/* }}} */

source/opencv2/core/opencv_mat.cc

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,12 +381,45 @@ PHP_METHOD(opencv_mat, at)
381381
opencv_mat_object *this_object = Z_PHP_MAT_OBJ_P(getThis());
382382
if(value_zval == NULL){
383383
//get px value
384-
RETURN_LONG(this_object->mat->at<Vec3b>((int)row,(int)col)[channel]/1);
384+
switch (this_object->mat->channels()){
385+
case 1:
386+
this_object->mat->at<uchar>((int)row,(int)col);
387+
break;
388+
case 2:
389+
RETURN_LONG(this_object->mat->at<Vec2b>((int)row,(int)col)[channel]);
390+
break;
391+
case 3:
392+
RETURN_LONG(this_object->mat->at<Vec3b>((int)row,(int)col)[channel]);
393+
break;
394+
case 4:
395+
RETURN_LONG(this_object->mat->at<Vec4b>((int)row,(int)col)[channel]);
396+
break;
397+
default:
398+
opencv_throw_exception("Get Mat px only channel in 1,2,3,4.");
399+
break;
400+
}
401+
385402
}else{
386403
//set px value
387404
convert_to_long(value_zval);
388405
zend_long value = Z_LVAL_P(value_zval);
389-
this_object->mat->at<Vec3b>((int)row,(int)col)[channel]=saturate_cast<uchar>(value);
406+
switch (this_object->mat->channels()){
407+
case 1:
408+
this_object->mat->at<uchar>((int)row,(int)col) = saturate_cast<uchar>(value);
409+
break;
410+
case 2:
411+
this_object->mat->at<Vec2b>((int)row,(int)col)[channel]=saturate_cast<uchar>(value);
412+
break;
413+
case 3:
414+
this_object->mat->at<Vec3b>((int)row,(int)col)[channel]=saturate_cast<uchar>(value);
415+
break;
416+
case 4:
417+
this_object->mat->at<Vec4b>((int)row,(int)col)[channel]=saturate_cast<uchar>(value);
418+
break;
419+
default:
420+
opencv_throw_exception("Get Mat px only channel in 1,2,3,4.");
421+
break;
422+
}
390423
}
391424
RETURN_NULL();
392425
}

source/opencv2/core/opencv_mat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "../../../php_opencv.h"
2121

22+
//todo Mat object noly unchar,need to support double,int,float
23+
2224
extern void opencv_mat_init(void);
2325

2426
extern zend_class_entry *opencv_mat_ce;

source/opencv2/opencv_core.cc

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ PHP_FUNCTION(opencv_log){
632632

633633
/**
634634
* //todo mask parameter
635-
* CV\log
635+
* CV\nromalize
636636
* @param execute_data
637637
* @param return_value
638638
*/
@@ -665,3 +665,39 @@ PHP_FUNCTION(opencv_normalize){
665665
RETURN_NULL();
666666

667667
}
668+
669+
670+
/**
671+
*
672+
* CV\LUT
673+
* @param execute_data
674+
* @param return_value
675+
*/
676+
PHP_FUNCTION(opencv_lut){
677+
zval *src_zval, *lut_zval, *dst_zval;
678+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OOz",
679+
&src_zval, opencv_mat_ce,
680+
&lut_zval, opencv_mat_ce,
681+
&dst_zval) == FAILURE) {
682+
RETURN_NULL();
683+
}
684+
opencv_mat_object *src_object = Z_PHP_MAT_OBJ_P(src_zval);
685+
opencv_mat_object *lut_object = Z_PHP_MAT_OBJ_P(lut_zval);
686+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
687+
opencv_mat_object *dst_object;
688+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
689+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
690+
} else{
691+
zval_ptr_dtor(dst_real_zval);
692+
zval instance;
693+
Mat dst;
694+
object_init_ex(&instance,opencv_mat_ce);
695+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
696+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
697+
dst_object->mat = new Mat(dst);
698+
}
699+
LUT(*src_object->mat, *lut_object->mat, *dst_object->mat);
700+
opencv_mat_update_property_by_c_mat(dst_real_zval, dst_object->mat);
701+
RETURN_NULL();
702+
703+
}

source/opencv2/opencv_core.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,11 @@ ZEND_BEGIN_ARG_INFO_EX(opencv_absdiff_arginfo, 0, 0, 3)
9999
ZEND_END_ARG_INFO()
100100
PHP_FUNCTION(opencv_absdiff);
101101

102+
ZEND_BEGIN_ARG_INFO_EX(opencv_lut_arginfo, 0, 0, 3)
103+
ZEND_ARG_INFO(0, src)
104+
ZEND_ARG_INFO(0, lut)
105+
ZEND_ARG_INFO(1, dst)
106+
ZEND_END_ARG_INFO()
107+
PHP_FUNCTION(opencv_lut);
108+
102109
#endif //OPENCV_CORE_H

0 commit comments

Comments
 (0)