void read3DConfiguration(const std::string &filename, bool omitOtherTags) { mOmitOtherTags = omitOtherTags; cv::FileStorage configuration(filename, cv::FileStorage::READ); if (!configuration.isOpened()) { std::cerr << "Could not open " << filename << std::endl; return; } mId2Configuration.clear(); for(const auto &objectConfig : configuration.root()) { for(const auto &tagConfig : objectConfig) { int id; tagConfig["tag"] >> id; float size; tagConfig["size"] >> size; int keep; tagConfig["keep"] >> keep; cv::Vec3f translation; cv::Vec3f rotation; for (int i : {0,1,2}) { tagConfig["translation"][i] >> translation[i]; tagConfig["rotation"] [i] >> rotation [i]; } mId2Configuration[id] = std::make_pair( objectConfig.name(), TagConfig(id, size, keep, cv::Vec3f(translation), cv::Vec3f(rotation))); } } }
bool read3DConfiguration(const std::string &filenameOrString, bool omitOtherTags, bool readFromString) { mOmitOtherTags = omitOtherTags; int mode; if(readFromString) mode = cv::FileStorage::READ + cv::FileStorage::MEMORY; else mode = cv::FileStorage::READ; cv::FileStorage configuration(filenameOrString, mode); if (!configuration.isOpened()) { if(readFromString){ std::cerr << "Could not read tag configuration: " << std::endl; std::cerr << filenameOrString << std::endl; } else std::cerr << "Could not open file: " << filenameOrString << std::endl; return false; } mId2Configuration.clear(); auto rootNode = configuration.root(); auto objectConfig = rootNode.begin(); for (; objectConfig != rootNode.end(); ++objectConfig) { // for(const auto &objectConfig : configuration.root()) { auto tagConfig = (*objectConfig).begin(); for(; tagConfig != (*objectConfig).end(); ++tagConfig) { // for(const auto &tagConfig : objectConfig) { int id; (*tagConfig)["tag"] >> id; float size; (*tagConfig)["size"] >> size; int keep; (*tagConfig)["keep"] >> keep; cv::Vec3f translation; cv::Vec3f rotation; for (int i = 0; i < 3; i++) { (*tagConfig)["translation"][i] >> translation[i]; (*tagConfig)["rotation"] [i] >> rotation [i]; } mId2Configuration[id] = std::make_pair( (*objectConfig).name(), TagConfig(id, size, keep, cv::Vec3f(translation), cv::Vec3f(rotation))); } } return true; }