load SoftCascade from FileStorage

pull/137/head
marina.kolpakova 12 years ago
parent a22ee13620
commit 017d970b9a
  1. 18
      modules/objdetect/include/opencv2/objdetect/objdetect.hpp
  2. 3
      modules/objdetect/perf/perf_cascadeclassifier.cpp
  3. 11
      modules/objdetect/src/softcascade.cpp
  4. 6
      modules/objdetect/test/test_softcascade.cpp

@ -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();

@ -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;

@ -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;

@ -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());

Loading…
Cancel
Save