Merge pull request #19423 from LaurentBerger:houg_acc
authorLaurentBerger <laurent.berger@univ-lemans.fr>
Mon, 1 Feb 2021 21:22:10 +0000 (22:22 +0100)
committerGitHub <noreply@github.com>
Mon, 1 Feb 2021 21:22:10 +0000 (21:22 +0000)
Return accumulator value in HoughLines algorithm

* try to solve #17050

use cv_wrap_as

add python test

parameters

* review

* move wrapper to imgproc/bindings.hpp

modules/imgproc/include/opencv2/imgproc/bindings.hpp [new file with mode: 0644]
modules/imgproc/misc/objc/gen_dict.json
modules/python/test/test_houghlines.py

diff --git a/modules/imgproc/include/opencv2/imgproc/bindings.hpp b/modules/imgproc/include/opencv2/imgproc/bindings.hpp
new file mode 100644 (file)
index 0000000..c69527a
--- /dev/null
@@ -0,0 +1,34 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef OPENCV_IMGPROC_BINDINGS_HPP
+#define OPENCV_IMGPROC_BINDINGS_HPP
+
+// This file contains special overloads for OpenCV bindings
+// No need to use these functions in C++ code.
+
+namespace cv {
+
+/** @brief Finds lines in a binary image using the standard Hough transform and get accumulator.
+ *
+ * @note This function is for bindings use only. Use original function in C++ code
+ *
+ * @sa HoughLines
+ */
+CV_WRAP static inline
+void HoughLinesWithAccumulator(
+        InputArray image, OutputArray lines,
+        double rho, double theta, int threshold,
+        double srn = 0, double stn = 0,
+        double min_theta = 0, double max_theta = CV_PI
+)
+{
+    std::vector<Vec3f> lines_acc;
+    HoughLines(image, lines_acc, rho, theta, threshold, srn, stn, min_theta, max_theta);
+    Mat(lines_acc).copyTo(lines);
+}
+
+}  // namespace
+
+#endif  // OPENCV_IMGPROC_BINDINGS_HPP
index 043baa5..7897bde 100644 (file)
@@ -1,4 +1,7 @@
 {
+    "AdditionalImports" : {
+        "Imgproc" : [ "\"imgproc/bindings.hpp\"" ]
+    },
     "enum_ignore_list" : [
         "MorphShapes_c",
         "SmoothMethod_c"
index 8deae54..3ecfbfe 100644 (file)
@@ -64,6 +64,9 @@ class houghlines_test(NewOpenCVTests):
 
         self.assertGreater(float(matches_counter) / len(testLines), .7)
 
+        lines_acc = cv.HoughLinesWithAccumulator(dst, rho=1, theta=np.pi / 180, threshold=150, srn=0, stn=0)
+        self.assertEqual(lines_acc[0,0,2], 192.0)
+        self.assertEqual(lines_acc[1,0,2], 187.0)
 
 if __name__ == '__main__':
     NewOpenCVTests.bootstrap()