@@ -375,109 +375,110 @@ PHP_FUNCTION(opencv_magnitude){
375375}
376376
377377/* *
378+ * Copyright (c) MaleicAcid
378379 * CV\absdiff
379380 * @param execute_data
380381 * @param return_value
381382 */
382383PHP_FUNCTION (opencv_absdiff){
383- zval *src1_zval, *src2_zval, *dst_zval;
384+ zval *src1_zval, *src2_zval, *dst_zval;
384385
385- if (zend_parse_parameters (ZEND_NUM_ARGS (), " zzz" ,
386- &src1_zval,
387- &src2_zval,
388- &dst_zval) == FAILURE) {
389- RETURN_NULL ();
390- }
391- opencv_mat_object *src1_mat_object = NULL , *src2_mat_object = NULL , *dst_mat_object = NULL ;
392- opencv_scalar_object *src1_scalar_object = NULL , *src2_scalar_object = NULL , *dst_scalar_object = NULL ;
386+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " zzz" ,
387+ &src1_zval,
388+ &src2_zval,
389+ &dst_zval) == FAILURE) {
390+ RETURN_NULL ();
391+ }
392+ opencv_mat_object *src1_mat_object = NULL , *src2_mat_object = NULL , *dst_mat_object = NULL ;
393+ opencv_scalar_object *src1_scalar_object = NULL , *src2_scalar_object = NULL , *dst_scalar_object = NULL ;
393394
394- int flag = 0 ;// 1 mat,0 scalar
395+ int flag = 0 ;// dst 1 mat,0 scalar
395396
396- if ( Z_TYPE_P (src1_zval ) != IS_OBJECT){
397- char *error_message = (char *)malloc (strlen (" src1 parameter must be Mat or Scalar object." ) + 1 );
398- strcpy (error_message," src1 parameter must be Mat or Scalar object." );
399- opencv_throw_exception (error_message);// throw exception
400- free (error_message);
401- }
397+ if ( Z_TYPE_P (src1_zval) != IS_OBJECT || Z_TYPE_P (src2_zval ) != IS_OBJECT){
398+ char *error_message = (char *)malloc (strlen (" src1 and src1 parameter must be Mat or Scalar object." ) + 1 );
399+ strcpy (error_message," src1 parameter must be Mat or Scalar object." );
400+ opencv_throw_exception (error_message);// throw exception
401+ free (error_message);
402+ }
402403
404+ if (Z_OBJCE_P (src1_zval) == opencv_mat_ce){
405+ src1_mat_object = Z_PHP_MAT_OBJ_P (src1_zval);
406+ }else if (Z_OBJCE_P (src1_zval) == opencv_scalar_ce){
407+ src1_scalar_object = Z_PHP_SCALAR_OBJ_P (src1_zval);
408+ }else {
409+ char *error_message = (char *)malloc (strlen (" src1 parameter must be Mat or Scalar object." ) + 1 );
410+ strcpy (error_message," src1 parameter must be Mat or Scalar object." );
411+ opencv_throw_exception (error_message);// throw exception
412+ free (error_message);
413+ }
414+
415+ if (Z_OBJCE_P (src2_zval) == opencv_mat_ce){
416+ src2_mat_object = Z_PHP_MAT_OBJ_P (src2_zval);
403417 if (Z_OBJCE_P (src1_zval) == opencv_mat_ce){
404- src1_mat_object = Z_PHP_MAT_OBJ_P (src1_zval);
405- flag |= (1 <<1 );
406- }else if (Z_OBJCE_P (src1_zval) == opencv_scalar_ce){
407- src1_scalar_object = Z_PHP_SCALAR_OBJ_P (src1_zval);
418+ flag = 3 ;
408419 }else {
409- char *error_message = (char *)malloc (strlen (" src1 parameter must be Mat or Scalar object." ) + 1 );
410- strcpy (error_message," src1 parameter must be Mat or Scalar object." );
411- opencv_throw_exception (error_message);// throw exception
412- free (error_message);
420+ flag = 1 ;
413421 }
414-
415- if (Z_TYPE_P (src2_zval) != IS_OBJECT){
416- char *error_message = (char *)malloc (strlen (" src2 parameter must be Mat or Scalar object." ) + 1 );
417- strcpy (error_message," src2 parameter must be Mat or Scalar object." );
418- opencv_throw_exception (error_message);// throw exception
419- free (error_message);
422+ }else if (Z_OBJCE_P (src2_zval) == opencv_scalar_ce){
423+ src2_scalar_object = Z_PHP_SCALAR_OBJ_P (src2_zval);
424+ if (Z_OBJCE_P (src1_zval) == opencv_mat_ce){
425+ flag = 2 ;
420426 }
427+ }else {
428+ char *error_message = (char *)malloc (strlen (" src2 parameter must be Mat or Scalar object." ) + 1 );
429+ strcpy (error_message," src2 parameter must be Mat or Scalar object." );
430+ opencv_throw_exception (error_message);// throw exception
431+ free (error_message);
432+ }
421433
422- if (Z_OBJCE_P (src2_zval) == opencv_mat_ce){
423- src2_mat_object = Z_PHP_MAT_OBJ_P (src2_zval);
424- flag |= (1 <<0 );
425- }else if (Z_OBJCE_P (src2_zval) == opencv_scalar_ce){
426- src2_scalar_object = Z_PHP_SCALAR_OBJ_P (src2_zval);
427- }else {
428- char *error_message = (char *)malloc (strlen (" src2 parameter must be Mat or Scalar object." ) + 1 );
429- strcpy (error_message," src2 parameter must be Mat or Scalar object." );
430- opencv_throw_exception (error_message);// throw exception
431- free (error_message);
432- }
434+ zval *dst_real_zval = Z_REFVAL_P (dst_zval);
433435
434- zval *dst_real_zval = Z_REFVAL_P (dst_zval);
435-
436- if (flag == 0 ){ // both scalar
437- if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval)==opencv_scalar_ce){
438- dst_scalar_object = Z_PHP_SCALAR_OBJ_P (dst_real_zval);
439- } else {
440- zval instance;
441- Scalar dst;
442- object_init_ex (&instance,opencv_scalar_ce);
443- ZVAL_COPY_VALUE (dst_real_zval, &instance);
444- dst_scalar_object = Z_PHP_SCALAR_OBJ_P (dst_real_zval);
445- dst_scalar_object->scalar = new Scalar (dst);
446- }
447-
448- absdiff (*src1_scalar_object->scalar ,*src2_scalar_object->scalar , *dst_scalar_object->scalar );
449- opencv_scalar_update_property_by_c_scalar (dst_real_zval, dst_scalar_object->scalar );
450- }else {
451- if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval)==opencv_mat_ce){
452- dst_mat_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
453- } else {
454- zval instance;
455- Mat dst;
456- object_init_ex (&instance,opencv_mat_ce);
457- ZVAL_COPY_VALUE (dst_real_zval, &instance);
458-
459- dst_mat_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
460- dst_mat_object->mat = new Mat (dst);
461- }
462- switch (flag){
463- case 1 :
464- absdiff (*src1_scalar_object->scalar ,*src2_mat_object->mat , *dst_mat_object->mat );
465- opencv_mat_update_property_by_c_mat (dst_real_zval, dst_mat_object->mat );
466- break ;
467- case 10 :
468- absdiff (*src1_mat_object->mat ,*src2_scalar_object->scalar , *dst_mat_object->mat );
469- opencv_mat_update_property_by_c_mat (dst_real_zval, dst_mat_object->mat );
470- break ;
471- case 11 :
472- absdiff (*src1_mat_object->mat ,*src2_mat_object->mat , *dst_mat_object->mat );
473- opencv_mat_update_property_by_c_mat (dst_real_zval, dst_mat_object->mat );
474- break ;
475- default :
476- break ;
477- }
436+ if (flag == 0 ){ // both scalar
437+ if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval)==opencv_scalar_ce){
438+ dst_scalar_object = Z_PHP_SCALAR_OBJ_P (dst_real_zval);
439+ } else {
440+ zval_ptr_dtor (dst_real_zval);
441+ zval instance;
442+ Scalar dst;
443+ object_init_ex (&instance,opencv_scalar_ce);
444+ ZVAL_COPY_VALUE (dst_real_zval, &instance);
445+ dst_scalar_object = Z_PHP_SCALAR_OBJ_P (dst_real_zval);
446+ dst_scalar_object->scalar = new Scalar (dst);
478447 }
479448
480- RETURN_NULL ();
449+ absdiff (*src1_scalar_object->scalar ,*src2_scalar_object->scalar , *dst_scalar_object->scalar );
450+ opencv_scalar_update_property_by_c_scalar (dst_real_zval, dst_scalar_object->scalar );
451+ }else {
452+ if (Z_TYPE_P (dst_real_zval) == IS_OBJECT && Z_OBJCE_P (dst_real_zval)==opencv_mat_ce){
453+ dst_mat_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
454+ } else {
455+ zval_ptr_dtor (dst_real_zval);
456+ zval instance;
457+ Mat dst;
458+ object_init_ex (&instance,opencv_mat_ce);
459+ ZVAL_COPY_VALUE (dst_real_zval, &instance);
460+
461+ dst_mat_object = Z_PHP_MAT_OBJ_P (dst_real_zval);
462+ dst_mat_object->mat = new Mat (dst);
463+ }
464+ switch (flag){
465+ case 1 :
466+ absdiff (*src1_scalar_object->scalar ,*src2_mat_object->mat , *dst_mat_object->mat );
467+ opencv_mat_update_property_by_c_mat (dst_real_zval, dst_mat_object->mat );
468+ break ;
469+ case 2 :
470+ absdiff (*src1_mat_object->mat ,*src2_scalar_object->scalar , *dst_mat_object->mat );
471+ opencv_mat_update_property_by_c_mat (dst_real_zval, dst_mat_object->mat );
472+ break ;
473+ case 3 :
474+ absdiff (*src1_mat_object->mat ,*src2_mat_object->mat , *dst_mat_object->mat );
475+ opencv_mat_update_property_by_c_mat (dst_real_zval, dst_mat_object->mat );
476+ break ;
477+ default :
478+ break ;
479+ }
480+ }
481+ RETURN_NULL ();
481482}
482483
483484/* *
0 commit comments