add reproducer and bugfix
authorSmirnov Egor <s.e.a.98@yandex.ru>
Mon, 24 May 2021 14:09:33 +0000 (17:09 +0300)
committerSmirnov Egor <s.e.a.98@yandex.ru>
Tue, 25 May 2021 08:28:23 +0000 (11:28 +0300)
modules/objdetect/src/hog.cpp
modules/objdetect/test/opencl/test_hogdetector.cpp

index 43771a8bda0fd081fb8110a4ad8b4844fd03810e..8a2107734a74c706d7f0531fd8996ee2932d3552 100644 (file)
@@ -122,6 +122,12 @@ void HOGDescriptor::setSVMDetector(InputArray _svmDetector)
     _svmDetector.getMat().convertTo(svmDetector, CV_32F);
     CV_Assert(checkDetectorSize());
 
+    if (_svmDetector.empty())
+    {
+        oclSvmDetector = UMat();
+        return;
+    }
+
     Mat detector_reordered(1, (int)svmDetector.size(), CV_32FC1);
 
     size_t block_hist_size = getBlockHistogramSize(blockSize, cellSize, nbins);
index 009274096f6f17f2756a88095a0c36e7c42feb60..cffe2e3fb5c93611ec91c4ec21fecd7d66375ef4 100644 (file)
@@ -93,6 +93,25 @@ OCL_TEST_P(HOG, GetDescriptors)
     EXPECT_MAT_SIMILAR(cpu_desc, gpu_desc, 1e-1);
 }
 
+OCL_TEST_P(HOG, SVMDetector)
+{
+    HOGDescriptor hog_first, hog_second;
+
+    // empty -> empty
+    hog_first.copyTo(hog_second);
+
+    // first -> both
+    hog_first.setSVMDetector(hog_first.getDefaultPeopleDetector());
+    hog_first.copyTo(hog_second);
+
+    // both -> both
+    hog_first.copyTo(hog_second);
+
+    // second -> empty
+    hog_first.setSVMDetector(cv::noArray());
+    hog_first.copyTo(hog_second);
+}
+
 OCL_TEST_P(HOG, Detect)
 {
     HOGDescriptor hog;