dnn: expose only float variant of NMSBoxes for bindings
authorPavel Rojtberg <rojtberg@gmail.com>
Mon, 16 Mar 2020 17:05:07 +0000 (18:05 +0100)
committerPavel Rojtberg <rojtberg@gmail.com>
Thu, 19 Mar 2020 11:36:35 +0000 (12:36 +0100)
the float variant was always shadowed by the int version as
Rect2d is implicitly convertible to Rect.
This swaps things which is fine, as the vector of boxes was always
copied and the computation was done in double.

modules/dnn/include/opencv2/dnn/dnn.hpp
modules/dnn/misc/python/test/test_dnn.py

index e67a4653346811177ad3c165b0a8ffb96ca7fb52..199e6d71c1f993bab738fe8e687b97463a05a96b 100644 (file)
@@ -1038,7 +1038,7 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
      * @param eta a coefficient in adaptive threshold formula: \f$nms\_threshold_{i+1}=eta\cdot nms\_threshold_i\f$.
      * @param top_k if `>0`, keep at most @p top_k picked indices.
      */
-    CV_EXPORTS_W void NMSBoxes(const std::vector<Rect>& bboxes, const std::vector<float>& scores,
+    CV_EXPORTS void NMSBoxes(const std::vector<Rect>& bboxes, const std::vector<float>& scores,
                                const float score_threshold, const float nms_threshold,
                                CV_OUT std::vector<int>& indices,
                                const float eta = 1.f, const int top_k = 0);
index f849cfaa10800f7bde4fd0b19a3b70f30572ccfb..932984f1c201eb1c6727386171de00c8056d377c 100644 (file)
@@ -230,6 +230,12 @@ class dnn_test(NewOpenCVTests):
                 self.assertTrue(ret)
                 normAssert(self, refs[i], result, 'Index: %d' % i, 1e-10)
 
+    def test_nms(self):
+        confs = (1, 1)
+        rects = ((0, 0, 0.4, 0.4), (0, 0, 0.2, 0.4)) # 0.5 overlap
+
+        self.assertTrue(all(cv.dnn.NMSBoxes(rects, confs, 0, 0.6).ravel() == (0, 1)))
+
     def test_custom_layer(self):
         class CropLayer(object):
             def __init__(self, params, blobs):