| /*M/////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. |
| // |
| // By downloading, copying, installing or using the software you agree to this license. |
| // If you do not agree to this license, do not download, install, |
| // copy or use the software. |
| // |
| // |
| // Intel License Agreement |
| // For Open Source Computer Vision Library |
| // |
| // Copyright (C) 2000, Intel Corporation, all rights reserved. |
| // Third party copyrights are property of their respective owners. |
| // |
| // Redistribution and use in source and binary forms, with or without modification, |
| // are permitted provided that the following conditions are met: |
| // |
| // * Redistribution's of source code must retain the above copyright notice, |
| // this list of conditions and the following disclaimer. |
| // |
| // * Redistribution's in binary form must reproduce the above copyright notice, |
| // this list of conditions and the following disclaimer in the documentation |
| // and/or other materials provided with the distribution. |
| // |
| // * The name of Intel Corporation may not be used to endorse or promote products |
| // derived from this software without specific prior written permission. |
| // |
| // This software is provided by the copyright holders and contributors "as is" and |
| // any express or implied warranties, including, but not limited to, the implied |
| // warranties of merchantability and fitness for a particular purpose are disclaimed. |
| // In no event shall the Intel Corporation or contributors be liable for any direct, |
| // indirect, incidental, special, exemplary, or consequential damages |
| // (including, but not limited to, procurement of substitute goods or services; |
| // loss of use, data, or profits; or business interruption) however caused |
| // and on any theory of liability, whether in contract, strict liability, |
| // or tort (including negligence or otherwise) arising in any way out of |
| // the use of this software, even if advised of the possibility of such damage. |
| // |
| //M*/ |
| |
| #include "_cvaux.h" |
| |
| // temporarily remove it from build |
| #if 0 && ((_MSC_VER>=1200) || defined __BORLANDC__) |
| |
| double CvMAT::get( const uchar* ptr, int type, int coi ) |
| { |
| double t = 0; |
| assert( (unsigned)coi < (unsigned)CV_MAT_CN(type) ); |
| |
| switch( CV_MAT_DEPTH(type) ) |
| { |
| case CV_8U: |
| t = ((uchar*)ptr)[coi]; |
| break; |
| case CV_8S: |
| t = ((char*)ptr)[coi]; |
| break; |
| case CV_16S: |
| t = ((short*)ptr)[coi]; |
| break; |
| case CV_32S: |
| t = ((int*)ptr)[coi]; |
| break; |
| case CV_32F: |
| t = ((float*)ptr)[coi]; |
| break; |
| case CV_64F: |
| t = ((double*)ptr)[coi]; |
| break; |
| } |
| |
| return t; |
| } |
| |
| void CvMAT::set( uchar* ptr, int type, int coi, double d ) |
| { |
| int i; |
| assert( (unsigned)coi < (unsigned)CV_MAT_CN(type) ); |
| |
| switch( CV_MAT_DEPTH(type)) |
| { |
| case CV_8U: |
| i = cvRound(d); |
| ((uchar*)ptr)[coi] = CV_CAST_8U(i); |
| break; |
| case CV_8S: |
| i = cvRound(d); |
| ((char*)ptr)[coi] = CV_CAST_8S(i); |
| break; |
| case CV_16S: |
| i = cvRound(d); |
| ((short*)ptr)[coi] = CV_CAST_16S(i); |
| break; |
| case CV_32S: |
| i = cvRound(d); |
| ((int*)ptr)[coi] = CV_CAST_32S(i); |
| break; |
| case CV_32F: |
| ((float*)ptr)[coi] = (float)d; |
| break; |
| case CV_64F: |
| ((double*)ptr)[coi] = d; |
| break; |
| } |
| } |
| |
| |
| void CvMAT::set( uchar* ptr, int type, int coi, int i ) |
| { |
| assert( (unsigned)coi < (unsigned)CV_MAT_CN(type) ); |
| |
| switch( CV_MAT_DEPTH(type)) |
| { |
| case CV_8U: |
| ((uchar*)ptr)[coi] = CV_CAST_8U(i); |
| break; |
| case CV_8S: |
| ((char*)ptr)[coi] = CV_CAST_8S(i); |
| break; |
| case CV_16S: |
| ((short*)ptr)[coi] = CV_CAST_16S(i); |
| break; |
| case CV_32S: |
| ((int*)ptr)[coi] = i; |
| break; |
| case CV_32F: |
| ((float*)ptr)[coi] = (float)i; |
| break; |
| case CV_64F: |
| ((double*)ptr)[coi] = (double)i; |
| break; |
| } |
| } |
| |
| |
| void CvMAT::set( uchar* ptr, int type, double d ) |
| { |
| int i, cn = CV_MAT_CN(type); |
| |
| switch( CV_MAT_DEPTH(type)) |
| { |
| case CV_8U: |
| i = cvRound(d); |
| ((uchar*)ptr)[0] = CV_CAST_8U(i); |
| i = cn; |
| while( --i ) ((uchar*)ptr)[i] = 0; |
| break; |
| case CV_8S: |
| i = cvRound(d); |
| ((char*)ptr)[0] = CV_CAST_8S(i); |
| i = cn; |
| while( --i ) ((char*)ptr)[i] = 0; |
| break; |
| case CV_16S: |
| i = cvRound(d); |
| ((short*)ptr)[0] = CV_CAST_16S(i); |
| i = cn; |
| while( --i ) ((short*)ptr)[i] = 0; |
| break; |
| case CV_32S: |
| i = cvRound(d); |
| ((int*)ptr)[0] = i; |
| i = cn; |
| while( --i ) ((int*)ptr)[i] = 0; |
| break; |
| case CV_32F: |
| ((float*)ptr)[0] = (float)d; |
| i = cn; |
| while( --i ) ((float*)ptr)[i] = 0; |
| break; |
| case CV_64F: |
| ((double*)ptr)[0] = d; |
| i = cn; |
| while( --i ) ((double*)ptr)[i] = 0; |
| break; |
| } |
| } |
| |
| |
| void CvMAT::set( uchar* ptr, int type, int i ) |
| { |
| int cn = CV_MAT_CN(type); |
| |
| switch( CV_MAT_DEPTH(type)) |
| { |
| case CV_8U: |
| ((uchar*)ptr)[0] = CV_CAST_8U(i); |
| i = cn; |
| while( --i ) ((uchar*)ptr)[i] = 0; |
| break; |
| case CV_8S: |
| ((char*)ptr)[0] = CV_CAST_8S(i); |
| i = cn; |
| while( --i ) ((char*)ptr)[i] = 0; |
| break; |
| case CV_16S: |
| ((short*)ptr)[0] = CV_CAST_16S(i); |
| i = cn; |
| while( --i ) ((short*)ptr)[i] = 0; |
| break; |
| case CV_32S: |
| ((int*)ptr)[0] = i; |
| i = cn; |
| while( --i ) ((int*)ptr)[i] = 0; |
| break; |
| case CV_32F: |
| ((float*)ptr)[0] = (float)i; |
| i = cn; |
| while( --i ) ((float*)ptr)[i] = 0; |
| break; |
| case CV_64F: |
| ((double*)ptr)[0] = (double)i; |
| i = cn; |
| while( --i ) ((double*)ptr)[i] = 0; |
| break; |
| } |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_T_& mat_t ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = mat_t; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_ADD_& mat_add ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = mat_add; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_ADD_EX_& mat_add ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = mat_add; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_SCALE_& scale_mat ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = scale_mat; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_SCALE_SHIFT_& scale_shift_mat ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = scale_shift_mat; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_MUL_& mmul ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = mmul; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_MUL_ADD_& mmuladd ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = mmuladd; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_INV_& inv_mat ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = inv_mat; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_NOT_& not_mat ) |
| { |
| type = 0; |
| data.ptr = 0; |
| refcount = 0; |
| *this = not_mat; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_UN_LOGIC_& mat_logic ) |
| { |
| type = 0; |
| data.ptr = 0; |
| refcount = 0; |
| *this = mat_logic; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_LOGIC_& mat_logic ) |
| { |
| type = 0; |
| data.ptr = 0; |
| refcount = 0; |
| *this = mat_logic; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_COPY_& mat_copy ) |
| { |
| CvMAT* src = (CvMAT*)mat_copy.a; |
| create( src->height, src->width, src->type ); |
| cvCopy( src, this ); |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_CVT_& mat_cvt ) |
| { |
| type = 0; |
| data.ptr = 0; |
| refcount = 0; |
| *this = mat_cvt; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_DOT_OP_& dot_op ) |
| { |
| data.ptr = 0; |
| type = 0; |
| refcount = 0; |
| *this = dot_op; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_SOLVE_& solve_mat ) |
| { |
| type = 0; |
| data.ptr = 0; |
| refcount = 0; |
| *this = solve_mat; |
| } |
| |
| |
| CvMAT::CvMAT( const _CvMAT_CMP_& cmp_mat ) |
| { |
| type = 0; |
| data.ptr = 0; |
| refcount = 0; |
| *this = cmp_mat; |
| } |
| |
| |
| /****************************************************************************************\ |
| * CvMAT::operator = * |
| \****************************************************************************************/ |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_T_& mat_t ) |
| { |
| CvMAT* src = (CvMAT*)&mat_t.a; |
| if( !data.ptr ) |
| { |
| create( src->width, src->height, src->type ); |
| } |
| |
| cvTranspose( src, this ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_ADD_& mat_add ) |
| { |
| CvMAT* a = mat_add.a; |
| CvMAT* b = mat_add.b; |
| |
| if( !data.ptr ) |
| { |
| create( a->height, a->width, a->type ); |
| } |
| |
| if( mat_add.beta == 1 ) |
| { |
| cvAdd( a, b, this ); |
| return *this; |
| } |
| |
| if( mat_add.beta == -1 ) |
| { |
| cvSub( a, b, this ); |
| return *this; |
| } |
| |
| if( CV_MAT_DEPTH(a->type) >= CV_32F && CV_MAT_CN(a->type) <= 2 ) |
| cvScaleAdd( b, cvScalar(mat_add.beta), a, this ); |
| else |
| cvAddWeighted( a, 1, b, mat_add.beta, 0, this ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_ADD_EX_& mat_add ) |
| { |
| CvMAT* a = mat_add.a; |
| CvMAT* b = mat_add.b; |
| |
| if( !data.ptr ) |
| { |
| create( a->height, a->width, a->type ); |
| } |
| |
| cvAddWeighted( a, mat_add.alpha, b, mat_add.beta, mat_add.gamma, this ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_SCALE_& scale_mat ) |
| { |
| CvMAT* src = scale_mat.a; |
| |
| if( !data.ptr ) |
| { |
| create( src->height, src->width, src->type ); |
| } |
| |
| cvConvertScale( src, this, scale_mat.alpha, 0 ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_SCALE_SHIFT_& scale_shift_mat ) |
| { |
| CvMAT* src = scale_shift_mat.a; |
| |
| if( !data.ptr ) |
| { |
| create( src->height, src->width, src->type ); |
| } |
| |
| cvConvertScale( src, this, scale_shift_mat.alpha, scale_shift_mat.beta ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_MUL_& mmul ) |
| { |
| CvMAT* a = mmul.a; |
| CvMAT* b = mmul.b; |
| int t_a = mmul.t_ab & 1; |
| int t_b = (mmul.t_ab & 2) != 0; |
| int m = (&(a->rows))[t_a]; |
| int n = (&(b->rows))[t_b ^ 1]; |
| /* this(m x n) = (a^o1(t))(m x l) * (b^o2(t))(l x n) */ |
| |
| if( !data.ptr ) |
| { |
| create( m, n, a->type ); |
| } |
| |
| if( mmul.alpha == 1 ) |
| { |
| if( mmul.t_ab == 0 ) |
| { |
| cvMatMulAdd( a, b, 0, this ); |
| return *this; |
| } |
| |
| if( a->data.ptr == b->data.ptr && mmul.t_ab < 3 && |
| a->rows == b->rows && a->cols == b->cols && |
| a->data.ptr != data.ptr ) |
| { |
| cvMulTransposed( a, this, mmul.t_ab & 1 ); |
| return *this; |
| } |
| } |
| |
| cvGEMM( a, b, mmul.alpha, 0, 0, this, mmul.t_ab ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_MUL_ADD_& mmuladd ) |
| { |
| CvMAT* a = mmuladd.a; |
| CvMAT* b = mmuladd.b; |
| CvMAT* c = mmuladd.c; |
| int t_a = mmuladd.t_abc & 1; |
| int t_b = (mmuladd.t_abc & 2) != 0; |
| int m = (&(a->rows))[t_a]; |
| int n = (&(b->rows))[t_b ^ 1]; |
| /* this(m x n) = (a^o1(t))(m x l) * (b^o2(t))(l x n) */ |
| |
| if( !data.ptr ) |
| { |
| create( m, n, a->type ); |
| } |
| |
| if( mmuladd.t_abc == 0 && mmuladd.alpha == 1 && mmuladd.beta == 1 ) |
| cvMatMulAdd( a, b, c, this ); |
| else |
| cvGEMM( a, b, mmuladd.alpha, c, mmuladd.beta, this, mmuladd.t_abc ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_INV_& inv_mat ) |
| { |
| CvMAT* src = (CvMAT*)&inv_mat.a; |
| |
| if( !data.ptr ) |
| { |
| create( src->height, src->width, src->type ); |
| } |
| |
| if( inv_mat.method == 0 ) |
| cvInvert( src, this ); |
| else |
| cvPseudoInv( src, this ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_NOT_& not_mat ) |
| { |
| CvMAT* src = not_mat.a; |
| |
| if( !data.ptr ) |
| { |
| create( src->height, src->width, src->type ); |
| } |
| |
| cvNot( src, this ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_LOGIC_& mat_logic ) |
| { |
| CvMAT* a = mat_logic.a; |
| CvMAT* b = mat_logic.b; |
| int flags = mat_logic.flags; |
| _CvMAT_LOGIC_::Op op = mat_logic.op; |
| |
| if( !data.ptr ) |
| { |
| create( a->height, a->width, a->type ); |
| } |
| |
| switch( op ) |
| { |
| case _CvMAT_LOGIC_::AND: |
| |
| if( flags == 0 ) |
| cvAnd( a, b, this ); |
| else if( flags == 3 ) |
| { |
| cvOr( a, b, this ); |
| cvNot( this, this ); |
| } |
| else if( flags == 1 ) |
| { |
| if( data.ptr == b->data.ptr ) |
| { |
| cvNot( b, this ); |
| cvOr( this, a, this ); |
| cvNot( this, this ); |
| } |
| else |
| { |
| cvNot( a, this ); |
| cvAnd( this, b, this ); |
| } |
| } |
| else |
| { |
| if( data.ptr == a->data.ptr ) |
| { |
| cvNot( a, this ); |
| cvOr( this, b, this ); |
| cvNot( this, this ); |
| } |
| else |
| { |
| cvNot( b, this ); |
| cvAnd( this, a, this ); |
| } |
| } |
| break; |
| |
| case _CvMAT_LOGIC_::OR: |
| |
| if( flags == 0 ) |
| cvOr( a, b, this ); |
| else if( flags == 3 ) |
| { |
| cvAnd( a, b, this ); |
| cvNot( this, this ); |
| } |
| else if( flags == 1 ) |
| { |
| if( data.ptr == b->data.ptr ) |
| { |
| cvNot( b, this ); |
| cvAnd( this, a, this ); |
| cvNot( this, this ); |
| } |
| else |
| { |
| cvNot( a, this ); |
| cvOr( this, b, this ); |
| } |
| } |
| else |
| { |
| if( data.ptr == a->data.ptr ) |
| { |
| cvNot( a, this ); |
| cvAnd( this, b, this ); |
| cvNot( this, this ); |
| } |
| else |
| { |
| cvNot( b, this ); |
| cvOr( this, a, this ); |
| } |
| } |
| break; |
| |
| case _CvMAT_LOGIC_::XOR: |
| |
| cvXor( a, b, this ); |
| if( flags == 1 || flags == 2 ) |
| cvNot( this, this ); |
| break; |
| } |
| |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_UN_LOGIC_& mat_logic ) |
| { |
| CvMAT* a = mat_logic.a; |
| CvScalar scalar = cvScalarAll( mat_logic.alpha ); |
| int flags = mat_logic.flags; |
| _CvMAT_LOGIC_::Op op = mat_logic.op; |
| |
| if( !data.ptr ) |
| { |
| create( a->height, a->width, a->type ); |
| } |
| |
| switch( op ) |
| { |
| case _CvMAT_LOGIC_::AND: |
| |
| if( flags == 0 ) |
| cvAndS( a, scalar, this ); |
| else |
| { |
| cvNot( a, this ); |
| cvAndS( this, scalar, this ); |
| } |
| break; |
| |
| case _CvMAT_LOGIC_::OR: |
| |
| if( flags == 0 ) |
| cvOrS( a, scalar, this ); |
| else |
| { |
| cvNot( a, this ); |
| cvOrS( this, scalar, this ); |
| } |
| break; |
| |
| case _CvMAT_LOGIC_::XOR: |
| |
| if( flags == 0 ) |
| cvXorS( a, scalar, this ); |
| else |
| cvXorS( a, ~scalar, this ); |
| break; |
| } |
| |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_COPY_& mat_copy ) |
| { |
| CvMAT* src = (CvMAT*)mat_copy.a; |
| |
| if( !data.ptr ) |
| { |
| create( src->height, src->width, src->type ); |
| } |
| |
| if( src != this ) |
| cvCopy( src, this ); |
| |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_CVT_& mat_cvt ) |
| { |
| CvMAT* src = (CvMAT*)&mat_cvt.a; |
| |
| if( !data.ptr ) |
| { |
| int depth = mat_cvt.newdepth; |
| create( src->height, src->width, depth < 0 ? src->type : |
| CV_MAT_CN(src->type)|CV_MAT_DEPTH(depth)); |
| } |
| |
| cvCvtScale( src, this, mat_cvt.scale, mat_cvt.shift ); |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_DOT_OP_& dot_op ) |
| { |
| CvMAT* a = (CvMAT*)&(dot_op.a); |
| CvMAT* b = dot_op.b; |
| |
| if( !data.ptr ) |
| { |
| create( a->height, a->width, a->type ); |
| } |
| |
| switch( dot_op.op ) |
| { |
| case '*': |
| cvMul( a, b, this, dot_op.alpha ); |
| break; |
| case '/': |
| if( b != 0 ) |
| cvDiv( a, b, this, dot_op.alpha ); |
| else |
| cvDiv( 0, a, this, dot_op.alpha ); |
| break; |
| case 'm': |
| if( b != 0 ) |
| cvMin( a, b, this ); |
| else |
| cvMinS( a, dot_op.alpha, this ); |
| break; |
| case 'M': |
| if( b != 0 ) |
| cvMax( a, b, this ); |
| else |
| cvMaxS( a, dot_op.alpha, this ); |
| break; |
| case 'a': |
| if( b != 0 ) |
| cvAbsDiff( a, b, this ); |
| else |
| cvAbsDiffS( a, this, cvScalar(dot_op.alpha) ); |
| break; |
| default: |
| assert(0); |
| } |
| |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_SOLVE_& solve_mat ) |
| { |
| CvMAT* a = (CvMAT*)(solve_mat.a); |
| CvMAT* b = (CvMAT*)(solve_mat.b); |
| |
| if( !data.ptr ) |
| { |
| create( a->height, b->width, a->type ); |
| } |
| |
| if( solve_mat.method == 0 ) |
| cvSolve( a, b, this ); |
| else |
| { |
| CvMAT temp; |
| cvInitMatHeader( &temp, a->cols, a->rows, a->type ); |
| cvCreateData( &temp ); |
| |
| cvPseudoInv( a, &temp ); |
| cvMatMul( &temp, b, this ); |
| } |
| |
| return *this; |
| } |
| |
| |
| CvMAT& CvMAT::operator = ( const _CvMAT_CMP_& mat_cmp ) |
| { |
| CvMAT* a = mat_cmp.a; |
| CvMAT* b = mat_cmp.b; |
| |
| if( !data.ptr ) |
| { |
| create( a->height, a->width, CV_8UC1 ); |
| } |
| |
| if( b ) |
| cvCmp( a, b, this, mat_cmp.cmp_op ); |
| else |
| cvCmpS( a, mat_cmp.alpha, this, mat_cmp.cmp_op ); |
| return *this; |
| } |
| |
| |
| /****************************************************************************************\ |
| * CvMAT I/O operations * |
| \****************************************************************************************/ |
| |
| void CvMAT::write( const char* name, FILE* f, const char* fmt ) |
| { |
| int i, j, w = width * CV_MAT_CN(type); |
| FILE* out = f ? f : stdout; |
| |
| if( name ) |
| fprintf( stdout, "%s(%d x %d) =\n\t", name, rows, cols ); |
| |
| for( i = 0; i < rows; i++ ) |
| { |
| switch( CV_MAT_DEPTH(type)) |
| { |
| case CV_8U: if( !fmt ) |
| fmt = "%4d"; |
| for( j = 0; j < w; j++ ) |
| fprintf( out, fmt, ((uchar*)(data.ptr + i*step))[j] ); |
| break; |
| case CV_8S: if( !fmt ) |
| fmt = "%5d"; |
| for( j = 0; j < w; j++ ) |
| fprintf( out, fmt, ((char*)(data.ptr + i*step))[j] ); |
| break; |
| case CV_16S: if( !fmt ) |
| fmt = "%7d"; |
| for( j = 0; j < w; j++ ) |
| fprintf( out, fmt, ((short*)(data.ptr + i*step))[j] ); |
| break; |
| case CV_32S: if( !fmt ) |
| fmt = " %08x"; |
| for( j = 0; j < w; j++ ) |
| fprintf( out, fmt, ((int*)(data.ptr + i*step))[j] ); |
| break; |
| case CV_32F: if( !fmt ) |
| fmt = "%15g"; |
| for( j = 0; j < w; j++ ) |
| fprintf( out, fmt, ((float*)(data.ptr + i*step))[j] ); |
| break; |
| case CV_64F: if( !fmt ) |
| fmt = "%15g"; |
| for( j = 0; j < w; j++ ) |
| fprintf( out, fmt, ((double*)(data.ptr + i*step))[j] ); |
| break; |
| } |
| fprintf( out, "\n%s", i < rows - 1 ? "\t" : "" ); |
| } |
| fprintf( out, "\n" ); |
| } |
| |
| #endif /* _MSC_VER || __BORLANDC__ */ |
| |
| /* End of file. */ |
| |
| |