cvReadTrainData的源码在opencv的cvboost.cpp文件之中,具体内容如下所示:
CV_BOOST_IMPL void cvReadTrainData( const char* filename, int flags, CvMat** trainData, CvMat** trainClasses ) { CV_FUNCNAME( "cvReadTrainData" ); __BEGIN__; FILE* file; int m, n; int i, j; float val; int values_read = -1; if( filename == NULL ) { CV_ERROR( CV_StsNullPtr, "filename must be specified" ); } if( trainData == NULL ) { CV_ERROR( CV_StsNullPtr, "trainData must be not NULL" ); } if( trainClasses == NULL ) { CV_ERROR( CV_StsNullPtr, "trainClasses must be not NULL" ); } *trainData = NULL; *trainClasses = NULL; file = fopen( filename, "r" ); if( !file ) { CV_ERROR( CV_StsError, "Unable to open file" ); } values_read = fscanf( file, "%d %d", &m, &n ); CV_Assert(values_read == 2); if( CV_IS_ROW_SAMPLE( flags ) ) { CV_CALL( *trainData = cvCreateMat( m, n, CV_32FC1 ) ); } else { CV_CALL( *trainData = cvCreateMat( n, m, CV_32FC1 ) ); } CV_CALL( *trainClasses = cvCreateMat( 1, m, CV_32FC1 ) ); for( i = 0; i < m; i++ ) { for( j = 0; j < n; j++ ) { values_read = fscanf( file, "%f", &val ); CV_Assert(values_read == 1); if( CV_IS_ROW_SAMPLE( flags ) ) { CV_MAT_ELEM( **trainData, float, i, j ) = val; } else { CV_MAT_ELEM( **trainData, float, j, i ) = val; } } values_read = fscanf( file, "%f", &val ); CV_Assert(values_read == 2); CV_MAT_ELEM( **trainClasses, float, 0, i ) = val; } fclose( file ); __END__; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/ding977921830/article/details/46831619