nareshmlx/opencv-pr huggingface dataset:
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -949,34 +949,99 @@ vector<Point2f> QRDetect::getQuadrilateral(vector<Point2f> angle_list)
     return result_angle_list;
 }
 
+struct QRCodeDetectorBase::Impl {
+    virtual ~Impl() {}
+    virtual bool detect(InputArray img, OutputArray points) const = 0;
+    virtual std::string decode(InputArray img, InputArray points, OutputArray straight_qrcode) const = 0;
+    virtual std::string detectAndDecode(InputArray img, OutputArray points, OutputArray straight_qrcode) const = 0;
+    virtual bool detectMulti(InputArray img, OutputArray points) const = 0;
```

Review comment:
The code with sort and then swaps looks very cryptic. Not clear, what if `side2 == side1`. I propose better solution: 1. Define a struct with length and reference(!) to FinderPatternInfo. 2. Use std::array of the structures and sort it by length. 3. Use array[0] as center pattern everywhere. All other - left and right.
**File:** modules/objdetect/test/test_qr_utils.hpp
**Change Type:** added
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -0,0 +1,78 @@
+// 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.
+#include "test_precomp.hpp"
+
+namespace opencv_test {
+
+static inline
+void check_qr(const string& root, const string& name_current_image, const string& config_name,
```

Review comment:
`ts->printf` works only in `Test classes` such as: ``` class CV_CalibrateHandEyeTest : public cvtest::BaseTest { public: CV_CalibrateHandEyeTest(bool eyeToHand) : eyeToHandConfig(eyeToHand) { eps_rvec[CALIB_HAND_EYE_TSAI] = 1.0e-8; ... ``` I don't now how add `ts->printf` to `TEST_P` tests.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Change `enum` to `enum class` to fix prefix name in Python. Python use case now: ``` print(cv.QRDetectMethod_ARUCO_BASED) print(cv.QRDetectMethod_BASE) ```
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
`enum class` causes an error in Java bindings, removed
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
I propose to name it `HOUGH_BASED` or some other way to highlight the internal approach.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -949,34 +949,99 @@ vector<Point2f> QRDetect::getQuadrilateral(vector<Point2f> angle_list)
     return result_angle_list;
 }
 
+struct QRCodeDetectorBase::Impl {
+    virtual ~Impl() {}
+    virtual bool detect(InputArray img, OutputArray points) const = 0;
+    virtual std::string decode(InputArray img, InputArray points, OutputArray straight_qrcode) const = 0;
+    virtual std::string detectAndDecode(InputArray img, OutputArray points, OutputArray straight_qrcode) const = 0;
+    virtual bool detectMulti(InputArray img, OutputArray points) const = 0;
```

Review comment:
Discussed offline. Not relevant.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
"module more this value". Also I propose to not mention calculateTimingPattern as it's internal implementation detail, but not a public API.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Please add note to all params, if they related to `ARUCO_BASED` algorithm, `CONTOURS_BASED` algorithm or both.
**File:** modules/objdetect/test/test_qr_utils.hpp
**Change Type:** added
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -0,0 +1,78 @@
+// 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.
+#include "test_precomp.hpp"
+
+namespace opencv_test {
+
+static inline
+void check_qr(const string& root, const string& name_current_image, const string& config_name,
```

Review comment:
You can do it with `TS::ptr()->printf`
**File:** modules/objdetect/test/test_qr_utils.hpp
**Change Type:** added
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -0,0 +1,78 @@
+// 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.
+#include "test_precomp.hpp"
+
+namespace opencv_test {
+
+static inline
+void check_qr(const string& root, const string& name_current_image, const string& config_name,
```

Review comment:
added: ``` TS::ptr()->printf(cvtest::TS::LOG, "Not found results for '%s", name_current_image.c_str(), "' image in config file:%s", dataset_config.c_str(), "Re-run tests with enabled UPDATE_QRCODE_TEST_DATA macro to update test data.\n"); ```
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
added info
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
removed mention of `calculateTimingPattern()`
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
> CommonQRCodeDetector `QRCodeDetectorBase` It is a mess to type "Common" prefix for Intellisense.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Please keep the existed coding style. No need to introduce unnecessary changes in this patch. To keep code readable and maintainable, prefer to: - put `CV_WRAP` and other modifiers (static/+inline) on a separate line (that could be modified frequently to support different bindings) - use dedicated line for method/function name in cases with long list of parameters.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
We should not have mess of parameters in a single entity. We should explode that class. Each implementation has own parameters set. Or event drop these "Parameters" and keep using set/get for each field. See dnn::Model (with tests) for the reference.
**File:** modules/objdetect/test/test_qr_utils.hpp
**Change Type:** added
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -0,0 +1,78 @@
+// 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.
+#include "test_precomp.hpp"
+
+namespace opencv_test {
+
+static inline
+void check_qr(const string& root, const string& name_current_image, const string& config_name,
```

Review comment:
Don't use legacy `TS::ptr()->printf`. Use google test features.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
I haven't done it yet. I will do it.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Bindings are not handled.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
return bindings back
**File:** modules/objdetect/test/test_qr_utils.hpp
**Change Type:** added
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -0,0 +1,78 @@
+// 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.
+#include "test_precomp.hpp"
+
+namespace opencv_test {
+
+static inline
+void check_qr(const string& root, const string& name_current_image, const string& config_name,
```

Review comment:
change to: ``` FAIL() << "Not found results for '" << name_current_image << "' image in config file:" << dataset_config << "Re-run tests with enabled UPDATE_QRCODE_TEST_DATA macro to update test data.\n"; ``` ok?
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
done, thx for review =)
**File:** modules/objdetect/test/test_qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -3,6 +3,7 @@
 // of this distribution and at http://opencv.org/license.html.
 
 #include "test_precomp.hpp"
+#include "test_qr_utils.hpp"
 #include "opencv2/imgproc.hpp"
 
 namespace opencv_test { namespace {
@@ -33,6 +34,8 @@ std::string qrcode_images_multiple[] = {
   "5_qrcodes.png", "6_qrcodes.png", "7_qrcodes.png", "8_close_qrcodes.png"
```

Review comment:
PImpl doesn't need `Ptr<>`. They are already smart pointers.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
`aruco::DetectorParameters`?
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -949,34 +949,99 @@ vector<Point2f> QRDetect::getQuadrilateral(vector<Point2f> angle_list)
     return result_angle_list;
 }
 
+struct QRCodeDetectorBase::Impl {
+    virtual ~Impl() {}
+    virtual bool detect(InputArray img, OutputArray points) const = 0;
+    virtual std::string decode(InputArray img, InputArray points, OutputArray straight_qrcode) const = 0;
+    virtual std::string detectAndDecode(InputArray img, OutputArray points, OutputArray straight_qrcode) const = 0;
+    virtual bool detectMulti(InputArray img, OutputArray points) const = 0;
```

Review comment:
`const Mat& img`?
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco
**Review Line:** 4529

**Code Changes:**
```diff
+        vector<Point2f> result;
+        vector<vector<Point2f> > corners;
+        vector<int> ids;
+        arucoDetector.detectMarkers(gray, corners, ids);
+        if (corners.size() >= 3ull) {
+            vector<QRCode> qrCodes = analyzeFinderPatterns(corners, gray.clone(), qrParams);
+            if (qrCodes.size() == 0ull)
+                return false;
+            for (auto& qr : qrCodes) {
+                for (Point2f& corner : qr.getQRCorners()) {
+                    result.push_back(corner);
```

Review comment:
why `.clone()`?
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -949,34 +949,99 @@ vector<Point2f> QRDetect::getQuadrilateral(vector<Point2f> angle_list)
     return result_angle_list;
 }
 
+struct QRCodeDetectorBase::Impl {
+    virtual ~Impl() {}
+    virtual bool detect(InputArray img, OutputArray points) const = 0;
+    virtual std::string decode(InputArray img, InputArray points, OutputArray straight_qrcode) const = 0;
+    virtual std::string detectAndDecode(InputArray img, OutputArray points, OutputArray straight_qrcode) const = 0;
+    virtual bool detectMulti(InputArray img, OutputArray points) const = 0;
```

Review comment:
`rejectedCorners` are optional in `detectMarkers` method. You can just drop it in method call.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Discussed offline.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco
**Review Line:** 4504

**Code Changes:**
```diff
+        }
+    }
+    return qrCodes;
+}
+
+struct PimplQRAruco : public ImplContour {
+    QRCodeDetectorAruco::Params qrParams;
+    aruco::ArucoDetector arucoDetector;
+    aruco::DetectorParameters arucoParams;
+
+    PimplQRAruco() {
```

Review comment:
`detect` and `detectAndDecode` are not overloaded. It means, that base class method is used. It's large confusion for users, because provided parameters are not applied. I propose just to call `detectMulti` and select largest QR or QR with highest confidence.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -949,34 +949,99 @@ vector<Point2f> QRDetect::getQuadrilateral(vector<Point2f> angle_list)
     return result_angle_list;
 }
 
+struct QRCodeDetectorBase::Impl {
+    virtual ~Impl() {}
+    virtual bool detect(InputArray img, OutputArray points) const = 0;
+    virtual std::string decode(InputArray img, InputArray points, OutputArray straight_qrcode) const = 0;
+    virtual std::string detectAndDecode(InputArray img, OutputArray points, OutputArray straight_qrcode) const = 0;
+    virtual bool detectMulti(InputArray img, OutputArray points) const = 0;
```

Review comment:
added const ref
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
added docs to `aruco::DetectorParameters` setter/getter
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco
**Review Line:** 4529

**Code Changes:**
```diff
+        vector<Point2f> result;
+        vector<vector<Point2f> > corners;
+        vector<int> ids;
+        arucoDetector.detectMarkers(gray, corners, ids);
+        if (corners.size() >= 3ull) {
+            vector<QRCode> qrCodes = analyzeFinderPatterns(corners, gray.clone(), qrParams);
+            if (qrCodes.size() == 0ull)
+                return false;
+            for (auto& qr : qrCodes) {
+                for (Point2f& corner : qr.getQRCorners()) {
+                    result.push_back(corner);
```

Review comment:
Still relevant.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco
**Review Line:** 4529

**Code Changes:**
```diff
+        vector<Point2f> result;
+        vector<vector<Point2f> > corners;
+        vector<int> ids;
+        arucoDetector.detectMarkers(gray, corners, ids);
+        if (corners.size() >= 3ull) {
+            vector<QRCode> qrCodes = analyzeFinderPatterns(corners, gray.clone(), qrParams);
+            if (qrCodes.size() == 0ull)
+                return false;
+            for (auto& qr : qrCodes) {
+                for (Point2f& corner : qr.getQRCorners()) {
+                    result.push_back(corner);
```

Review comment:
clone is needed as the algorithm calls adaptive threshold on input data.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -949,34 +949,99 @@ vector<Point2f> QRDetect::getQuadrilateral(vector<Point2f> angle_list)
     return result_angle_list;
 }
 
+struct QRCodeDetectorBase::Impl {
+    virtual ~Impl() {}
+    virtual bool detect(InputArray img, OutputArray points) const = 0;
+    virtual std::string decode(InputArray img, InputArray points, OutputArray straight_qrcode) const = 0;
+    virtual std::string detectAndDecode(InputArray img, OutputArray points, OutputArray straight_qrcode) const = 0;
+    virtual bool detectMulti(InputArray img, OutputArray points) const = 0;
```

Review comment:
`clone()` need to avoid `gray` corruption
**File:** samples/cpp/qrcode.cpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -12,6 +12,7 @@ using namespace cv;
 static int liveQRCodeDetect();
 static int imageQRCodeDetect(const string& in_file);
 
+static bool g_useArucoBased = false;
 static bool g_modeMultiQR = false;
 static bool g_detectOnly = false;
 
@@ -35,6 +36,7 @@ int main(int argc, char *argv[])
     const string keys =
```

Review comment:
1. We don't need `Ptr` for PImpl which is already smart ptr. 2. `Ptr`s must be passed as "const reference" be default.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
All "set" methods should return `*this` reference to allow construction chains.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Should be `QRCodeDetectorAruco::Params` instead.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
Constructors with single parameters must be `explicit` by default. > ` = QrWithArucoParams()` Anyway, we don't need parameter for ctor: - there is set method. - align design with `QRCodeDetector`
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
> setter > getter documentation are messed.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
getters should return `const reference` by default.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23264: Add detect qr with aruco

**Code Changes:**
```diff
@@ -45,6 +45,7 @@
 #define OPENCV_OBJDETECT_HPP
 
 #include "opencv2/core.hpp"
+#include "opencv2/objdetect/aruco_detector.hpp"
 
 /**
 @defgroup objdetect Object Detection
@@ -763,28 +764,15 @@ class CV_EXPORTS_W QRCodeEncoder {
 
```

Review comment:
IOS bindings break with internal classes