1414 +----------------------------------------------------------------------+
1515 */
1616
17- #ifdef HAVE_CONFIG_H
18- #include " config.h"
19- #endif
2017
2118#include " ../../../php_opencv.h"
2219#include " opencv_mat.h"
@@ -366,6 +363,7 @@ PHP_METHOD(opencv_mat, copy_to)
366363}
367364
368365/* *
366+ * //todo int,fload,double
369367 * CV\Mat->at
370368 * @param execute_data
371369 * @param return_value
@@ -386,10 +384,10 @@ PHP_METHOD(opencv_mat, at)
386384 this_object->mat ->at <uchar>((int )row,(int )col);
387385 break ;
388386 case 2 :
389- RETURN_LONG (this_object->mat ->at <Vec2b>((int )row,(int )col)[channel]);
387+ RETURN_LONG (this_object->mat ->at <Vec2b>((int )row,(int )col)[channel]);
390388 break ;
391389 case 3 :
392- RETURN_LONG (this_object->mat ->at <Vec3b>((int )row,(int )col)[channel]);
390+ RETURN_LONG (this_object->mat ->at <Vec3b>((int )row,(int )col)[channel]);
393391 break ;
394392 case 4 :
395393 RETURN_LONG (this_object->mat ->at <Vec4b>((int )row,(int )col)[channel]);
@@ -399,27 +397,52 @@ PHP_METHOD(opencv_mat, at)
399397 break ;
400398 }
401399
400+
402401 }else {
403402 // set px value
404403 convert_to_long (value_zval);
405404 zend_long value = Z_LVAL_P (value_zval);
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);
405+ switch (this_object->mat ->depth ()){
406+ case CV_8U:
407+ switch (this_object->mat ->channels ()){
408+ case 1 :
409+ this_object->mat ->at <uchar>((int )row,(int )col) = saturate_cast<uchar>(value);
410+ break ;
411+ case 2 :
412+ this_object->mat ->at <Vec2b>((int )row,(int )col)[channel]=saturate_cast<uchar>(value);
413+ break ;
414+ case 3 :
415+ this_object->mat ->at <Vec3b>((int )row,(int )col)[channel]=saturate_cast<uchar>(value);
416+ break ;
417+ case 4 :
418+ this_object->mat ->at <Vec4b>((int )row,(int )col)[channel]=saturate_cast<uchar>(value);
419+ break ;
420+ default :
421+ opencv_throw_exception (" Get Mat px only channel in 1,2,3,4." );
422+ break ;
423+ }
418424 break ;
419425 default :
420- opencv_throw_exception (" Get Mat px only channel in 1,2,3,4." );
426+ switch (this_object->mat ->channels ()){
427+ case 1 :
428+ this_object->mat ->at <uchar>((int )row,(int )col) = saturate_cast<char >(value);
429+ break ;
430+ case 2 :
431+ this_object->mat ->at <Vec2b>((int )row,(int )col)[channel]=saturate_cast<char >(value);
432+ break ;
433+ case 3 :
434+ this_object->mat ->at <Vec3b>((int )row,(int )col)[channel]=saturate_cast<char >(value);
435+ break ;
436+ case 4 :
437+ this_object->mat ->at <Vec4b>((int )row,(int )col)[channel]=saturate_cast<char >(value);
438+ break ;
439+ default :
440+ opencv_throw_exception (" Get Mat px only channel in 1,2,3,4." );
441+ break ;
442+ }
421443 break ;
422444 }
445+
423446 }
424447 RETURN_NULL ();
425448}
@@ -531,6 +554,30 @@ PHP_METHOD(opencv_mat, divide)
531554 RETURN_ZVAL (&instance,0 ,0 ); // return php Mat object
532555}
533556
557+
558+
559+ /* *
560+ * //todo mask
561+ * Mat->setTo(Scalar $value)
562+ * @param execute_data
563+ * @param return_value
564+ */
565+ PHP_METHOD (opencv_mat, set_to)
566+ {
567+ zval *value_zval;
568+
569+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " O" , &value_zval, opencv_scalar_ce) == FAILURE) {
570+ RETURN_NULL ();
571+ }
572+
573+ opencv_mat_object *this_obj = Z_PHP_MAT_OBJ_P (getThis ());
574+ opencv_scalar_object *value_obj = Z_PHP_SCALAR_OBJ_P (value_zval);
575+ this_obj->mat ->setTo (*value_obj->scalar );
576+
577+ RETURN_NULL ();
578+
579+ }
580+
534581/* *
535582 * opencv_mat_methods[]
536583 */
@@ -556,6 +603,7 @@ const zend_function_entry opencv_mat_methods[] = {
556603 PHP_MALIAS (opencv_mat, convertTo ,convert_to, opencv_mat_convert_to_arginfo, ZEND_ACC_PUBLIC)
557604 PHP_ME (opencv_mat, plus, NULL , ZEND_ACC_PUBLIC)
558605 PHP_ME (opencv_mat, divide, NULL , ZEND_ACC_PUBLIC)
606+ PHP_MALIAS (opencv_mat, setTo ,set_to, NULL , ZEND_ACC_PUBLIC)
559607 PHP_FE_END
560608};
561609/* }}} */
0 commit comments