cv::Ptr<Camera> Camera::read( const cv::FileNode& node ) { std::string myName=node.name( ); if( myName != "Camera" ) { std::string error = "Camera FileNode is not correct!\nExpected \"Camera\", got "; error += node.name(); CV_Error( CV_StsError, error.c_str() ); } //nothing to do as we are a fake camera... return cv::Ptr<Camera>( NULL ); }
void read_from_yaml(cv::FileNode node, bool& b) { ntk_throw_exception_if(node.empty(), "Could not read " + node.name() + " from yaml file."); int i = cvReadInt(*node, -1); ntk_assert(i >= 0 && i <= 1, "Invalid boolean value"); b = i; }
void SequenceAnalyzer::read( const cv::FileNode& node, SequenceAnalyzer& me ) { std::string myName=node.name( ); if( myName != "SequenceAnalyzer" ) { std::string error = "FileNode is not correct!\nExpected \"SequenceAnalyzer\", got "; error += node.name(); CV_Error( CV_StsError, error.c_str() ); } if( node.empty( ) || !node.isMap( ) ) CV_Error( CV_StsError, "SequenceAnalyzer FileNode is not correct!" ); int nb_pictures = ( int ) node[ "nbPictures" ]; //initialisation of all empty vectors for( int i=0; i<nb_pictures; i++ ) { Ptr<PointsToTrack> ptt; if( i<me.images_.size() ) { ptt = Ptr<PointsToTrack>( new PointsToTrackWithImage( i, me.images_[i] )); } else { ptt = Ptr<PointsToTrack>( new PointsToTrack( i )); } me.points_to_track_.push_back( ptt ); Ptr<PointsMatcher> p_m = Ptr<PointsMatcher>( new PointsMatcher( *me.match_algorithm_ ) ); p_m->add( ptt ); me.matches_.push_back( p_m ); } cv::FileNode node_TrackPoints = node[ "TrackPoints" ]; //tracks are stored in the following form: //list of track where a track is stored like this: // nbPoints idImage1 point1 idImage2 point2 ... if( node_TrackPoints.empty( ) || !node_TrackPoints.isSeq() ) CV_Error( CV_StsError, "SequenceAnalyzer FileNode is not correct!" ); cv::FileNodeIterator it = node_TrackPoints.begin( ), it_end = node_TrackPoints.end( ); while( it != it_end ) { cv::FileNode it_track = ( *it )[ 0 ]; int nbPoints,track_consistance; it_track[ "nbPoints" ] >> nbPoints; it_track[ "track_consistance" ] >> track_consistance; bool has_3d_point = false; it_track[ "has_3d_position" ] >> has_3d_point; TrackOfPoints track; if( has_3d_point ) { cv::Vec3d point; point[ 0 ] = it_track[ "point3D_triangulated" ][ 0 ]; point[ 1 ] = it_track[ "point3D_triangulated" ][ 1 ]; point[ 2 ] = it_track[ "point3D_triangulated" ][ 2 ]; track.point3D = Ptr<cv::Vec3d>( new cv::Vec3d( point ) ); } int color; it_track[ "color" ] >> color; track.setColor( *((unsigned int*)&color) ); cv::FileNodeIterator itPoints = it_track[ "list_of_points" ].begin( ), itPoints_end = it_track[ "list_of_points" ].end( ); while( itPoints != itPoints_end ) { int idImage; cv::KeyPoint kpt; idImage = ( *itPoints )[ 0 ]; itPoints++; kpt.pt.x = ( *itPoints )[ 0 ]; kpt.pt.y = ( *itPoints )[ 1 ]; kpt.size = ( *itPoints )[ 2 ]; kpt.angle = ( *itPoints )[ 3 ]; kpt.response = ( *itPoints )[ 4 ]; kpt.octave = ( *itPoints )[ 5 ]; kpt.class_id = ( *itPoints )[ 6 ]; unsigned int point_index = me.points_to_track_[ idImage ]-> addKeypoint( kpt ); track.addMatch( idImage,point_index ); itPoints++; } track.track_consistance = track_consistance; me.tracks_.push_back( track ); it++; } }
void read_from_yaml(cv::FileNode node, cv::Mat& matrix) { CvMat* m = (CvMat*)node.readObj(); ntk_throw_exception_if(!m, std::string("Could not read field ") + node.name() + " from yml file."); matrix = m; }
void read_from_yaml(cv::FileNode node, double& b) { ntk_throw_exception_if(node.empty(), "Could not read " + node.name() + " from yaml file."); b = cvReadReal(*node, 0); }
void read_from_yaml(cv::FileNode node, int& i) { ntk_throw_exception_if(node.empty(), "Could not read " + node.name() + " from yaml file."); i = cvReadInt(*node, -1); }
void Regression::verify(cv::FileNode node, cv::InputArray array, double eps, ERROR_TYPE err) { int expected_kind = (int)node["kind"]; int expected_type = (int)node["type"]; ASSERT_EQ(expected_kind, array.kind()) << " Argument \"" << node.name() << "\" has unexpected kind"; ASSERT_EQ(expected_type, array.type()) << " Argument \"" << node.name() << "\" has unexpected type"; cv::FileNode valnode = node["val"]; if (isVector(array)) { int expected_length = (int)node["len"]; ASSERT_EQ(expected_length, (int)array.total()) << " Vector \"" << node.name() << "\" has unexpected length"; int idx = node["idx"]; cv::Mat actual = array.getMat(idx); if (valnode.isNone()) { ASSERT_LE((size_t)26, actual.total() * (size_t)actual.channels()) << " \"" << node.name() << "[" << idx << "]\" has unexpected number of elements"; verify(node, actual, eps, cv::format("%s[%d]", node.name().c_str(), idx), err); } else { cv::Mat expected; valnode >> expected; if(expected.empty()) { ASSERT_TRUE(actual.empty()) << " expected empty " << node.name() << "[" << idx<< "]"; } else { ASSERT_EQ(expected.size(), actual.size()) << " " << node.name() << "[" << idx<< "] has unexpected size"; cv::Mat diff; cv::absdiff(expected, actual, diff); if (err == ERROR_ABSOLUTE) { if (!cv::checkRange(diff, true, 0, 0, eps)) { if(expected.total() * expected.channels() < 12) std::cout << " Expected: " << std::endl << expected << std::endl << " Actual:" << std::endl << actual << std::endl; double max; cv::minMaxIdx(diff.reshape(1), 0, &max); FAIL() << " Absolute difference (=" << max << ") between argument \"" << node.name() << "[" << idx << "]\" and expected value is greater than " << eps; } } else if (err == ERROR_RELATIVE) { double maxv, maxa; int violations = countViolations(expected, actual, diff, eps, &maxv, &maxa); if (violations > 0) { FAIL() << " Relative difference (" << maxv << " of " << maxa << " allowed) between argument \"" << node.name() << "[" << idx << "]\" and expected value is greater than " << eps << " in " << violations << " points"; } } } } } else { if (valnode.isNone())