From 695e33b25bbfb898ee2437dbc004d8e2bd09a966 Mon Sep 17 00:00:00 2001 From: mvukad Date: Tue, 22 Mar 2016 15:19:42 -0700 Subject: [PATCH] Fix missing format when writing Algorithm-based objects Added a writeFormat() method to Algorithm which must be called by the write() method of derived classes. --- modules/calib3d/src/stereobm.cpp | 1 + modules/calib3d/src/stereosgbm.cpp | 1 + modules/core/include/opencv2/core.hpp | 3 +++ modules/core/src/algorithm.cpp | 6 +++++- modules/cudaimgproc/src/canny.cpp | 1 + modules/cudaimgproc/src/hough_circles.cpp | 1 + modules/cudaimgproc/src/hough_lines.cpp | 1 + modules/cudaimgproc/src/hough_segments.cpp | 1 + modules/features2d/src/akaze.cpp | 1 + modules/features2d/src/blobdetector.cpp | 1 + modules/features2d/src/kaze.cpp | 1 + modules/features2d/src/matchers.cpp | 1 + modules/ml/src/ann_mlp.cpp | 1 + modules/ml/src/boost.cpp | 1 + modules/ml/src/em.cpp | 1 + modules/ml/src/knearest.cpp | 1 + modules/ml/src/lr.cpp | 1 + modules/ml/src/nbayes.cpp | 1 + modules/ml/src/rtrees.cpp | 1 + modules/ml/src/svm.cpp | 1 + modules/ml/src/svmsgd.cpp | 1 + modules/ml/src/tree.cpp | 1 + modules/photo/src/align.cpp | 1 + modules/photo/src/calibrate.cpp | 2 ++ modules/photo/src/merge.cpp | 1 + modules/photo/src/tonemap.cpp | 5 +++++ modules/shape/src/aff_trans.cpp | 1 + modules/shape/src/haus_dis.cpp | 1 + modules/shape/src/hist_cost.cpp | 4 ++++ modules/shape/src/sc_dis.cpp | 1 + modules/shape/src/tps_trans.cpp | 1 + modules/video/src/bgfg_KNN.cpp | 1 + modules/video/src/bgfg_gaussmix2.cpp | 1 + 33 files changed, 47 insertions(+), 1 deletion(-) diff --git a/modules/calib3d/src/stereobm.cpp b/modules/calib3d/src/stereobm.cpp index eb7daad..83ed9ae 100644 --- a/modules/calib3d/src/stereobm.cpp +++ b/modules/calib3d/src/stereobm.cpp @@ -1225,6 +1225,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "minDisparity" << params.minDisparity << "numDisparities" << params.numDisparities diff --git a/modules/calib3d/src/stereosgbm.cpp b/modules/calib3d/src/stereosgbm.cpp index 1c085f9..67e150e 100644 --- a/modules/calib3d/src/stereosgbm.cpp +++ b/modules/calib3d/src/stereosgbm.cpp @@ -1512,6 +1512,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "minDisparity" << params.minDisparity << "numDisparities" << params.numDisparities diff --git a/modules/core/include/opencv2/core.hpp b/modules/core/include/opencv2/core.hpp index 2e47658..4311b14 100644 --- a/modules/core/include/opencv2/core.hpp +++ b/modules/core/include/opencv2/core.hpp @@ -3059,6 +3059,9 @@ public: /** Returns the algorithm string identifier. This string is used as top level xml/yml node tag when the object is saved to a file or string. */ CV_WRAP virtual String getDefaultName() const; + +protected: + void writeFormat(FileStorage& fs) const; }; struct Param { diff --git a/modules/core/src/algorithm.cpp b/modules/core/src/algorithm.cpp index b930428..4e7701a 100644 --- a/modules/core/src/algorithm.cpp +++ b/modules/core/src/algorithm.cpp @@ -57,7 +57,6 @@ void Algorithm::save(const String& filename) const { FileStorage fs(filename, FileStorage::WRITE); fs << getDefaultName() << "{"; - fs << "format" << (int)3; write(fs); fs << "}"; } @@ -67,6 +66,11 @@ String Algorithm::getDefaultName() const return String("my_object"); } +void Algorithm::writeFormat(FileStorage& fs) const +{ + fs << "format" << (int)3; +} + } /* End of file. */ diff --git a/modules/cudaimgproc/src/canny.cpp b/modules/cudaimgproc/src/canny.cpp index 1e52bd2..75e53cf 100644 --- a/modules/cudaimgproc/src/canny.cpp +++ b/modules/cudaimgproc/src/canny.cpp @@ -93,6 +93,7 @@ namespace void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << "Canny_CUDA" << "low_thresh" << low_thresh_ << "high_thresh" << high_thresh_ diff --git a/modules/cudaimgproc/src/hough_circles.cpp b/modules/cudaimgproc/src/hough_circles.cpp index 6bdaf16..b706967 100644 --- a/modules/cudaimgproc/src/hough_circles.cpp +++ b/modules/cudaimgproc/src/hough_circles.cpp @@ -99,6 +99,7 @@ namespace void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << "HoughCirclesDetector_CUDA" << "dp" << dp_ << "minDist" << minDist_ diff --git a/modules/cudaimgproc/src/hough_lines.cpp b/modules/cudaimgproc/src/hough_lines.cpp index 7b9c082..db45fb6 100644 --- a/modules/cudaimgproc/src/hough_lines.cpp +++ b/modules/cudaimgproc/src/hough_lines.cpp @@ -95,6 +95,7 @@ namespace void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << "HoughLinesDetector_CUDA" << "rho" << rho_ << "theta" << theta_ diff --git a/modules/cudaimgproc/src/hough_segments.cpp b/modules/cudaimgproc/src/hough_segments.cpp index e3e34ec..edd3006 100644 --- a/modules/cudaimgproc/src/hough_segments.cpp +++ b/modules/cudaimgproc/src/hough_segments.cpp @@ -98,6 +98,7 @@ namespace void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << "PHoughLinesDetector_CUDA" << "rho" << rho_ << "theta" << theta_ diff --git a/modules/features2d/src/akaze.cpp b/modules/features2d/src/akaze.cpp index bfe91af..f4fe27c 100644 --- a/modules/features2d/src/akaze.cpp +++ b/modules/features2d/src/akaze.cpp @@ -217,6 +217,7 @@ namespace cv void write(FileStorage& fs) const { + writeFormat(fs); fs << "descriptor" << descriptor; fs << "descriptor_channels" << descriptor_channels; fs << "descriptor_size" << descriptor_size; diff --git a/modules/features2d/src/blobdetector.cpp b/modules/features2d/src/blobdetector.cpp index aa8593a..23b6f2b 100644 --- a/modules/features2d/src/blobdetector.cpp +++ b/modules/features2d/src/blobdetector.cpp @@ -184,6 +184,7 @@ void SimpleBlobDetectorImpl::read( const cv::FileNode& fn ) void SimpleBlobDetectorImpl::write( cv::FileStorage& fs ) const { + writeFormat(fs); params.write(fs); } diff --git a/modules/features2d/src/kaze.cpp b/modules/features2d/src/kaze.cpp index 0174907..64778a0 100644 --- a/modules/features2d/src/kaze.cpp +++ b/modules/features2d/src/kaze.cpp @@ -159,6 +159,7 @@ namespace cv void write(FileStorage& fs) const { + writeFormat(fs); fs << "extended" << (int)extended; fs << "upright" << (int)upright; fs << "threshold" << threshold; diff --git a/modules/features2d/src/matchers.cpp b/modules/features2d/src/matchers.cpp index a1b557f..11dfa6d 100644 --- a/modules/features2d/src/matchers.cpp +++ b/modules/features2d/src/matchers.cpp @@ -1179,6 +1179,7 @@ void FlannBasedMatcher::read( const FileNode& fn) void FlannBasedMatcher::write( FileStorage& fs) const { + writeFormat(fs); fs << "indexParams" << "["; if (indexParams) diff --git a/modules/ml/src/ann_mlp.cpp b/modules/ml/src/ann_mlp.cpp index 19ee913..a772f31 100644 --- a/modules/ml/src/ann_mlp.cpp +++ b/modules/ml/src/ann_mlp.cpp @@ -1151,6 +1151,7 @@ public: return; int i, l_count = layer_count(); + writeFormat(fs); fs << "layer_sizes" << layer_sizes; write_params( fs ); diff --git a/modules/ml/src/boost.cpp b/modules/ml/src/boost.cpp index d7b6c61..3b6bd7a 100644 --- a/modules/ml/src/boost.cpp +++ b/modules/ml/src/boost.cpp @@ -387,6 +387,7 @@ public: if( roots.empty() ) CV_Error( CV_StsBadArg, "RTrees have not been trained" ); + writeFormat(fs); writeParams(fs); int k, ntrees = (int)roots.size(); diff --git a/modules/ml/src/em.cpp b/modules/ml/src/em.cpp index 99b6866..5b833cd 100644 --- a/modules/ml/src/em.cpp +++ b/modules/ml/src/em.cpp @@ -770,6 +770,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "training_params" << "{"; write_params(fs); fs << "}"; diff --git a/modules/ml/src/knearest.cpp b/modules/ml/src/knearest.cpp index 99477cd..24c08da 100644 --- a/modules/ml/src/knearest.cpp +++ b/modules/ml/src/knearest.cpp @@ -466,6 +466,7 @@ public: void write( FileStorage& fs ) const { + writeFormat(fs); impl->write(fs); } diff --git a/modules/ml/src/lr.cpp b/modules/ml/src/lr.cpp index 585162c..a0917a5 100644 --- a/modules/ml/src/lr.cpp +++ b/modules/ml/src/lr.cpp @@ -547,6 +547,7 @@ void LogisticRegressionImpl::write(FileStorage& fs) const { CV_Error(CV_StsBadArg,"file can't open. Check file path"); } + writeFormat(fs); string desc = "Logisitic Regression Classifier"; fs<<"classifier"<params.alpha; diff --git a/modules/ml/src/nbayes.cpp b/modules/ml/src/nbayes.cpp index 733dcf3..c46367c 100644 --- a/modules/ml/src/nbayes.cpp +++ b/modules/ml/src/nbayes.cpp @@ -342,6 +342,7 @@ public: { int nclasses = (int)cls_labels.total(), i; + writeFormat(fs); fs << "var_count" << (var_idx.empty() ? nallvars : (int)var_idx.total()); fs << "var_all" << nallvars; diff --git a/modules/ml/src/rtrees.cpp b/modules/ml/src/rtrees.cpp index 1c9120a..0175944 100644 --- a/modules/ml/src/rtrees.cpp +++ b/modules/ml/src/rtrees.cpp @@ -296,6 +296,7 @@ public: if( roots.empty() ) CV_Error( CV_StsBadArg, "RTrees have not been trained" ); + writeFormat(fs); writeParams(fs); fs << "oob_error" << oobError; diff --git a/modules/ml/src/svm.cpp b/modules/ml/src/svm.cpp index 34acebb..3cef84f 100644 --- a/modules/ml/src/svm.cpp +++ b/modules/ml/src/svm.cpp @@ -2037,6 +2037,7 @@ public: if( !isTrained() ) CV_Error( CV_StsParseError, "SVM model data is invalid, check sv_count, var_* and class_count tags" ); + writeFormat(fs); write_params( fs ); fs << "var_count" << var_count; diff --git a/modules/ml/src/svmsgd.cpp b/modules/ml/src/svmsgd.cpp index ef5da6f..0ef9175 100644 --- a/modules/ml/src/svmsgd.cpp +++ b/modules/ml/src/svmsgd.cpp @@ -364,6 +364,7 @@ void SVMSGDImpl::write(FileStorage& fs) const if( !isTrained() ) CV_Error( CV_StsParseError, "SVMSGD model data is invalid, it hasn't been trained" ); + writeFormat(fs); writeParams( fs ); fs << "weights" << weights_; diff --git a/modules/ml/src/tree.cpp b/modules/ml/src/tree.cpp index 143e1fb..6c1dabc 100644 --- a/modules/ml/src/tree.cpp +++ b/modules/ml/src/tree.cpp @@ -1681,6 +1681,7 @@ void DTreesImpl::writeTree( FileStorage& fs, int root ) const void DTreesImpl::write( FileStorage& fs ) const { + writeFormat(fs); writeParams(fs); writeTree(fs, roots[0]); } diff --git a/modules/photo/src/align.cpp b/modules/photo/src/align.cpp index 94be92d..4fda881 100644 --- a/modules/photo/src/align.cpp +++ b/modules/photo/src/align.cpp @@ -184,6 +184,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "max_bits" << max_bits << "exclude_range" << exclude_range diff --git a/modules/photo/src/calibrate.cpp b/modules/photo/src/calibrate.cpp index 63f1818..f945ef1 100644 --- a/modules/photo/src/calibrate.cpp +++ b/modules/photo/src/calibrate.cpp @@ -141,6 +141,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "samples" << samples << "lambda" << lambda @@ -250,6 +251,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "max_iter" << max_iter << "threshold" << threshold; diff --git a/modules/photo/src/merge.cpp b/modules/photo/src/merge.cpp index f051f55..4292f7c 100644 --- a/modules/photo/src/merge.cpp +++ b/modules/photo/src/merge.cpp @@ -265,6 +265,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "contrast_weight" << wcon << "saturation_weight" << wsat diff --git a/modules/photo/src/tonemap.cpp b/modules/photo/src/tonemap.cpp index 1ccc84e..a3a71fe 100644 --- a/modules/photo/src/tonemap.cpp +++ b/modules/photo/src/tonemap.cpp @@ -83,6 +83,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "gamma" << gamma; } @@ -161,6 +162,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "gamma" << gamma << "bias" << bias @@ -242,6 +244,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "gamma" << gamma << "contrast" << contrast @@ -339,6 +342,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "gamma" << gamma << "intensity" << intensity @@ -446,6 +450,7 @@ public: void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name << "gamma" << gamma << "scale" << scale diff --git a/modules/shape/src/aff_trans.cpp b/modules/shape/src/aff_trans.cpp index ec2342f..26644eb 100644 --- a/modules/shape/src/aff_trans.cpp +++ b/modules/shape/src/aff_trans.cpp @@ -79,6 +79,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "affine_type" << int(fullAffine); } diff --git a/modules/shape/src/haus_dis.cpp b/modules/shape/src/haus_dis.cpp index 6f2679f..dd67a29 100644 --- a/modules/shape/src/haus_dis.cpp +++ b/modules/shape/src/haus_dis.cpp @@ -77,6 +77,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "distance" << distanceFlag << "rank" << rankProportion; diff --git a/modules/shape/src/hist_cost.cpp b/modules/shape/src/hist_cost.cpp index 53c2c68..7df3c4e 100644 --- a/modules/shape/src/hist_cost.cpp +++ b/modules/shape/src/hist_cost.cpp @@ -99,6 +99,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "flag" << flag << "dummies" << nDummies @@ -224,6 +225,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "flag" << flag << "dummies" << nDummies @@ -350,6 +352,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "dummies" << nDummies << "default" << defaultCost; @@ -466,6 +469,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "dummies" << nDummies << "default" << defaultCost; diff --git a/modules/shape/src/sc_dis.cpp b/modules/shape/src/sc_dis.cpp index 4d1de12..423ae8e 100644 --- a/modules/shape/src/sc_dis.cpp +++ b/modules/shape/src/sc_dis.cpp @@ -137,6 +137,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "nRads" << nRadialBins << "nAngs" << nAngularBins diff --git a/modules/shape/src/tps_trans.cpp b/modules/shape/src/tps_trans.cpp index 038fd2a..acff256 100644 --- a/modules/shape/src/tps_trans.cpp +++ b/modules/shape/src/tps_trans.cpp @@ -81,6 +81,7 @@ public: //! write/read virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "regularization" << regularizationParameter; } diff --git a/modules/video/src/bgfg_KNN.cpp b/modules/video/src/bgfg_KNN.cpp index 334810b..a532204 100755 --- a/modules/video/src/bgfg_KNN.cpp +++ b/modules/video/src/bgfg_KNN.cpp @@ -183,6 +183,7 @@ public: virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "history" << history << "nsamples" << nN diff --git a/modules/video/src/bgfg_gaussmix2.cpp b/modules/video/src/bgfg_gaussmix2.cpp index 4b07811..2720e50 100644 --- a/modules/video/src/bgfg_gaussmix2.cpp +++ b/modules/video/src/bgfg_gaussmix2.cpp @@ -286,6 +286,7 @@ public: virtual void write(FileStorage& fs) const { + writeFormat(fs); fs << "name" << name_ << "history" << history << "nmixtures" << nmixtures -- 2.7.4