load SoftCascade from FileStorage
authormarina.kolpakova <marina.kolpakova@itseez.com>
Thu, 25 Oct 2012 05:40:16 +0000 (09:40 +0400)
committermarina.kolpakova <marina.kolpakova@itseez.com>
Tue, 6 Nov 2012 23:19:06 +0000 (03:19 +0400)
modules/objdetect/include/opencv2/objdetect/objdetect.hpp
modules/objdetect/perf/perf_cascadeclassifier.cpp
modules/objdetect/src/softcascade.cpp
modules/objdetect/test/test_softcascade.cpp

index b56d5f1..85084a9 100644 (file)
@@ -500,25 +500,29 @@ public:
         float confidence;
         int kind;
 
-        enum {PEDESTRIAN = 0};
+        enum {PEDESTRIAN = 1};
 
+        //! Create detection from an object bounding rectangle and confidence. Only PEDESTRIAN type carrently supported.
+        //! Param r is a boundinf rectangle
+        //! param c is a confidence that object belongs to class k
+        //! Paral k is an object class
         Detection(const cv::Rect& r, const float c, int k = PEDESTRIAN) : rect(r), confidence(c), kind(k) {}
     };
 
     //! An empty cascade will be created.
     SoftCascade();
 
-    //! Cascade will be created from file for scales from minScale to maxScale.
-    //! Param filename is a path to xml-serialized cascade.
+    //! Cascade will be created for scales from minScale to maxScale.
+    //! Param fs is a serialized sacsade.
     //! Param minScale is a minimum scale relative to the original size of the image on which cascade will be applyed.
     //! Param minScale is a maximum scale relative to the original size of the image on which cascade will be applyed.
-    SoftCascade( const string& filename, const float minScale = 0.4f, const float maxScale = 5.f);
+    SoftCascade( const cv::FileStorage& fs, const float minScale = 0.4f, const float maxScale = 5.f);
 
-    //! cascade will be loaded from file "filename". The previous cascade will be destroyed.
-    //! Param filename is a path to xml-serialized cascade.
+    //! cascade will be loaded. The previous cascade will be destroyed.
+    //! Param fs is a serialized sacsade.
     //! Param minScale is a minimum scale relative to the original size of the image on which cascade will be applyed.
     //! Param minScale is a maximum scale relative to the original size of the image on which cascade will be applyed.
-    bool load( const string& filename, const float minScale = 0.4f, const float maxScale = 5.f);
+    bool read( const cv::FileStorage& fs, const float minScale = 0.4f, const float maxScale = 5.f);
 
     virtual ~SoftCascade();
 
index 271ede0..bf47d55 100644 (file)
@@ -65,7 +65,8 @@ PERF_TEST_P(detect, SoftCascade,
     ASSERT_FALSE(colored.empty());
 
     cv::SoftCascade cascade;
-    ASSERT_TRUE(cascade.load(getDataPath(get<0>(GetParam()))));
+    cv::FileStorage fs(getDataPath(get<0>(GetParam())), cv::FileStorage::READ);
+    ASSERT_TRUE(cascade.read(fs));
 
     std::vector<cv::Rect> rois;
     std::vector<detection_t> objectBoxes;
index c70e80c..7c735b2 100644 (file)
@@ -499,24 +499,23 @@ struct cv::SoftCascade::Filds
 
 cv::SoftCascade::SoftCascade() : filds(0) {}
 
-cv::SoftCascade::SoftCascade( const string& filename, const float minScale, const float maxScale) : filds(0)
+cv::SoftCascade::SoftCascade(const cv::FileStorage& fs, const float minScale, const float maxScale) : filds(0)
 {
-    load(filename, minScale, maxScale);
+    read(fs, minScale, maxScale);
 }
 cv::SoftCascade::~SoftCascade()
 {
     delete filds;
 }
 
-bool cv::SoftCascade::load( const string& filename, const float minScale, const float maxScale)
+bool cv::SoftCascade::read( const cv::FileStorage& fs, const float minScale, const float maxScale)
 {
+    if (!fs.isOpened()) return false;
+
     if (filds)
         delete filds;
     filds = 0;
 
-    cv::FileStorage fs(filename, FileStorage::READ);
-    if (!fs.isOpened()) return false;
-
     filds = new Filds;
     Filds& flds = *filds;
     if (!flds.fill(fs.getFirstTopLevelNode(), minScale, maxScale)) return false;
index 811ad2c..b75db73 100644 (file)
@@ -45,7 +45,8 @@ TEST(SoftCascade, readCascade)
 {
     std::string xml = cvtest::TS::ptr()->get_data_path() + "cascadeandhog/icf-template.xml";
     cv::SoftCascade cascade;
-    ASSERT_TRUE(cascade.load(xml));
+    cv::FileStorage fs(xml, cv::FileStorage::READ);
+    ASSERT_TRUE(cascade.read(fs));
 
 }
 
@@ -54,7 +55,8 @@ TEST(SoftCascade, detect)
     typedef cv::SoftCascade::Detection detection_t;
     std::string xml =  cvtest::TS::ptr()->get_data_path() + "cascadeandhog/sc_cvpr_2012_to_opencv.xml";
     cv::SoftCascade cascade;
-    ASSERT_TRUE(cascade.load(xml));
+    cv::FileStorage fs(xml, cv::FileStorage::READ);
+    ASSERT_TRUE(cascade.read(fs));
 
     cv::Mat colored = cv::imread(cvtest::TS::ptr()->get_data_path() + "cascadeandhog/bahnhof/image_00000000_0.png");
     ASSERT_FALSE(colored.empty());