Fix and test for #2607
authorEvgeny Talanin <evgeny.talanin@itseez.com>
Wed, 30 Jan 2013 17:39:26 +0000 (21:39 +0400)
committerEvgeny Talanin <evgeny.talanin@itseez.com>
Thu, 31 Jan 2013 08:23:08 +0000 (12:23 +0400)
modules/objdetect/src/hog.cpp
modules/objdetect/test/test_cascadeandhog.cpp

index 9388c5b..f1a32c4 100644 (file)
@@ -138,7 +138,7 @@ void HOGDescriptor::write(FileStorage& fs, const String& objName) const
     << "gammaCorrection" << gammaCorrection
     << "nlevels" << nlevels;
     if( !svmDetector.empty() )
-        fs << "SVMDetector" << "[:" << svmDetector << "]";
+        fs << "SVMDetector" << svmDetector;
     fs << "}";
 }
 
index e41314a..3f31a7e 100644 (file)
@@ -461,5 +461,30 @@ int CV_HOGDetectorTest::detectMultiScale( int di, const Mat& img,
     return cvtest::TS::OK;
 }
 
+//----------------------------------------------- HOGDetectorReadWriteTest -----------------------------------
+TEST(Objdetect_HOGDetectorReadWrite, regression)
+{
+    // Inspired by bug #2607
+    Mat img;
+    img = imread(cvtest::TS::ptr()->get_data_path() + "/cascadeandhog/images/karen-and-rob.png");
+    ASSERT_FALSE(img.empty());
+
+    HOGDescriptor hog;
+    hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
+
+    string tempfilename = cv::tempfile(".xml");
+    FileStorage fs(tempfilename, FileStorage::WRITE);
+    hog.write(fs, "myHOG");
+
+    fs.open(tempfilename, FileStorage::READ);
+    remove(tempfilename.c_str());
+
+    FileNode n = fs["opencv_storage"]["myHOG"];
+
+    ASSERT_NO_THROW(hog.read(n));
+}
+
+
+
 TEST(Objdetect_CascadeDetector, regression) { CV_CascadeDetectorTest test; test.safe_run(); }
 TEST(Objdetect_HOGDetector, regression) { CV_HOGDetectorTest test; test.safe_run(); }