diff --git a/modules/objdetect/include/opencv2/objdetect/objdetect.hpp b/modules/objdetect/include/opencv2/objdetect/objdetect.hpp index b56d5f1db6..85084a90c4 100644 --- a/modules/objdetect/include/opencv2/objdetect/objdetect.hpp +++ b/modules/objdetect/include/opencv2/objdetect/objdetect.hpp @@ -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(); diff --git a/modules/objdetect/perf/perf_cascadeclassifier.cpp b/modules/objdetect/perf/perf_cascadeclassifier.cpp index 271ede0072..bf47d555c9 100644 --- a/modules/objdetect/perf/perf_cascadeclassifier.cpp +++ b/modules/objdetect/perf/perf_cascadeclassifier.cpp @@ -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 rois; std::vector objectBoxes; diff --git a/modules/objdetect/src/softcascade.cpp b/modules/objdetect/src/softcascade.cpp index c70e80c004..7c735b21de 100644 --- a/modules/objdetect/src/softcascade.cpp +++ b/modules/objdetect/src/softcascade.cpp @@ -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; diff --git a/modules/objdetect/test/test_softcascade.cpp b/modules/objdetect/test/test_softcascade.cpp index 811ad2c5ed..b75db7371f 100644 --- a/modules/objdetect/test/test_softcascade.cpp +++ b/modules/objdetect/test/test_softcascade.cpp @@ -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());