nareshmlx/opencv-pr huggingface dataset:
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
I propose to name it simply "detect" or "detectBoard" like "detectMarkers" for Aruco.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
if ARUCO part is implaced first, then default parameters isn't allowed.
**File:** apps/interactive-calibration/frameProcessor.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -11,7 +11,6 @@
 
 #include <vector>
 #include <string>
-#include <algorithm>
 #include <limits>
 
 using namespace calib;
@@ -74,17 +73,12 @@ bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
 
```

Review comment:
empy line is not needed.
**File:** apps/interactive-calibration/frameProcessor.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -11,7 +11,6 @@
 
 #include <vector>
 #include <string>
-#include <algorithm>
 #include <limits>
 
 using namespace calib;
@@ -74,17 +73,12 @@ bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
 
```

Review comment:
It makes sense to make it class field, but not re-create each time.
**File:** modules/objdetect/src/aruco/aruco_detector.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -866,7 +866,7 @@ ArucoDetector::ArucoDetector(const Dictionary &_dictionary,
 }
 
 void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corners, OutputArray _ids,
-                                  OutputArrayOfArrays _rejectedImgPoints) {
+                                  OutputArrayOfArrays _rejectedImgPoints) const {
     CV_Assert(!_image.empty());
     DetectorParameters& detectorParams = arucoDetectorImpl->detectorParams;
     const Dictionary& dictionary = arucoDetectorImpl->dictionary;
@@ -1004,37 +1004,25 @@ void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corner
```

Review comment:
extra space line before constructor
**File:** modules/objdetect/src/aruco/aruco_detector.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -866,7 +866,7 @@ ArucoDetector::ArucoDetector(const Dictionary &_dictionary,
 }
 
 void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corners, OutputArray _ids,
-                                  OutputArrayOfArrays _rejectedImgPoints) {
+                                  OutputArrayOfArrays _rejectedImgPoints) const {
     CV_Assert(!_image.empty());
     DetectorParameters& detectorParams = arucoDetectorImpl->detectorParams;
     const Dictionary& dictionary = arucoDetectorImpl->dictionary;
@@ -1004,37 +1004,25 @@ void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corner
```

Review comment:
added const
**File:** modules/objdetect/src/aruco/aruco_detector.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -866,7 +866,7 @@ ArucoDetector::ArucoDetector(const Dictionary &_dictionary,
 }
 
 void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corners, OutputArray _ids,
-                                  OutputArrayOfArrays _rejectedImgPoints) {
+                                  OutputArrayOfArrays _rejectedImgPoints) const {
     CV_Assert(!_image.empty());
     DetectorParameters& detectorParams = arucoDetectorImpl->detectorParams;
     const Dictionary& dictionary = arucoDetectorImpl->dictionary;
@@ -1004,37 +1004,25 @@ void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corner
```

Review comment:
added Mat::empty() check
**File:** modules/objdetect/src/aruco/aruco_detector.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -866,7 +866,7 @@ ArucoDetector::ArucoDetector(const Dictionary &_dictionary,
 }
 
 void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corners, OutputArray _ids,
-                                  OutputArrayOfArrays _rejectedImgPoints) {
+                                  OutputArrayOfArrays _rejectedImgPoints) const {
     CV_Assert(!_image.empty());
     DetectorParameters& detectorParams = arucoDetectorImpl->detectorParams;
     const Dictionary& dictionary = arucoDetectorImpl->dictionary;
@@ -1004,37 +1004,25 @@ void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corner
```

Review comment:
added extra space line before constructor
**File:** apps/interactive-calibration/frameProcessor.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -11,7 +11,6 @@
 
 #include <vector>
 #include <string>
-#include <algorithm>
 #include <limits>
 
 using namespace calib;
@@ -74,17 +73,12 @@ bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
 
```

Review comment:
empy line was removed
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
rename `detectCharuco` to `detectBoard`
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
Board implements Pimpl pattern. Virtual is redundant here.
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,154 @@
+// 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_OBJDETECT_CHARUCO_DETECTOR_HPP
+#define OPENCV_OBJDETECT_CHARUCO_DETECTOR_HPP
+
+#include "opencv2/objdetect/aruco_detector.hpp"
+
+namespace cv {
```

Review comment:
"Homography is faster than reprojection, but less accurate."
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,154 @@
+// 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_OBJDETECT_CHARUCO_DETECTOR_HPP
+#define OPENCV_OBJDETECT_CHARUCO_DETECTOR_HPP
+
+#include "opencv2/objdetect/aruco_detector.hpp"
+
+namespace cv {
```

Review comment:
Please add reference to classic chessboard pattern and related functions. `See also: ...`
**File:** apps/interactive-calibration/frameProcessor.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 149

**Code Changes:**
```diff
 
@@ -155,6 +146,7 @@ bool CalibProcessor::detectAndParseDualACircles(const cv::Mat &frame)
 void CalibProcessor::saveFrameData()
 {
     std::vector<cv::Point3f> objectPoints;
+    std::vector<cv::Point2f> imagePoints;
 
     switch(mBoardType)
     {
@@ -169,6 +161,11 @@ void CalibProcessor::saveFrameData()
     case chAruco:
```

Review comment:
It's not used.
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,154 @@
+// 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_OBJDETECT_CHARUCO_DETECTOR_HPP
+#define OPENCV_OBJDETECT_CHARUCO_DETECTOR_HPP
+
+#include "opencv2/objdetect/aruco_detector.hpp"
+
+namespace cv {
```

Review comment:
`CV_PROPERTY_RW`?
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,521 @@
+// 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 "../precomp.hpp"
+
+#include <opencv2/calib3d.hpp>
+#include "opencv2/objdetect/charuco_detector.hpp"
+#include "aruco_utils.hpp"
```

Review comment:
`.empty()`?
**File:** apps/interactive-calibration/frameProcessor.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 149

**Code Changes:**
```diff
 
@@ -155,6 +146,7 @@ bool CalibProcessor::detectAndParseDualACircles(const cv::Mat &frame)
 void CalibProcessor::saveFrameData()
 {
     std::vector<cv::Point3f> objectPoints;
+    std::vector<cv::Point2f> imagePoints;
 
     switch(mBoardType)
     {
@@ -169,6 +161,11 @@ void CalibProcessor::saveFrameData()
     case chAruco:
```

Review comment:
uses in this case: ``` case chAruco: mCalibData->allCharucoCorners.push_back(mCurrentCharucoCorners); mCalibData->allCharucoIds.push_back(mCurrentCharucoIds); mCharucoBoard->matchImagePoints(mCurrentCharucoCorners, mCurrentCharucoIds, objectPoints, imagePoints); mCalibData->imagePoints.push_back(imagePoints); mCalibData->objectPoints.push_back(objectPoints); ```
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
Move implementation to pimple?
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,154 @@
+// 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_OBJDETECT_CHARUCO_DETECTOR_HPP
+#define OPENCV_OBJDETECT_CHARUCO_DETECTOR_HPP
+
+#include "opencv2/objdetect/aruco_detector.hpp"
+
+namespace cv {
```

Review comment:
`CV_PROP_RW`, but not `CV_WARP`
**File:** modules/objdetect/misc/python/test/test_objdetect_aruco.py
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -3,7 +3,7 @@
 # Python 2/3 compatibility
 from __future__ import print_function
 
-import os, numpy as np
+import os, tempfile, numpy as np
 
 import cv2 as cv
 
@@ -17,14 +17,14 @@ def test_idsAccessibility(self):
```

Review comment:
use `tempfile.mkstemp`
**File:** modules/objdetect/misc/python/test/test_objdetect_aruco.py
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 136

**Code Changes:**
```diff
+
+        list_gold_corners = []
+        for i in range(1, board_size[0]):
+            for j in range(1, board_size[1]):
+                list_gold_corners.append((j*cell_size, i*cell_size))
+        gold_corners = np.array(list_gold_corners, dtype=np.float32)
+
+        charucoCorners, charucoIds, markerCorners, markerIds = charuco_detector.detectBoard(image)
+
+        self.assertEqual(len(charucoIds), 4)
+        for i in range(0, 4):
```

Review comment:
please use float instead of np.float32 here and in other places. See https://github.com/opencv/opencv/pull/22965
**File:** apps/interactive-calibration/parametersController.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 131

**Code Changes:**
```diff
@@ -127,7 +128,7 @@ bool calib::parametersController::loadFromParser(cv::CommandLineParser &parser)
     }
     else if(templateType.find("charuco", 0) == 0) {
         mCapParams.board = chAruco;
-        mCapParams.boardSize = cv::Size(6, 8);
+        mCapParams.boardSize = cv::Size(5, 7);
         mCapParams.charucoDictName = 0;
         mCapParams.charucoSquareLength = 200;
         mCapParams.charucoMarkerSize = 100;
```

Review comment:
no need to touch it.
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,154 @@
+// 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_OBJDETECT_CHARUCO_DETECTOR_HPP
+#define OPENCV_OBJDETECT_CHARUCO_DETECTOR_HPP
+
+#include "opencv2/objdetect/aruco_detector.hpp"
+
+namespace cv {
```

Review comment:
Please use doxygen notation to get documentation
**File:** apps/interactive-calibration/parametersController.cpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 131

**Code Changes:**
```diff
@@ -127,7 +128,7 @@ bool calib::parametersController::loadFromParser(cv::CommandLineParser &parser)
     }
     else if(templateType.find("charuco", 0) == 0) {
         mCapParams.board = chAruco;
-        mCapParams.boardSize = cv::Size(6, 8);
+        mCapParams.boardSize = cv::Size(5, 7);
         mCapParams.charucoDictName = 0;
         mCapParams.charucoSquareLength = 200;
         mCapParams.charucoMarkerSize = 100;
```

Review comment:
After fix the vars `h`/`w` is setting num corners for CharucoBard (like in chessboard) After fix CharucoBoard create looks like this: cv::aruco::CharucoBoard::create(mBoardSize.width **+ 1**, mBoardSize.height **+ 1**, capParams.charucoSquareLength, capParams.charucoMarkerSize, mArucoDictionary); `mCapParams.boardSize = cv::Size(5, 7);` was fixed to support compatibility with old default parameters
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -0,0 +1,154 @@
+// 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_OBJDETECT_CHARUCO_DETECTOR_HPP
+#define OPENCV_OBJDETECT_CHARUCO_DETECTOR_HPP
+
+#include "opencv2/objdetect/aruco_detector.hpp"
+
+namespace cv {
```

Review comment:
Now this looks like this: ``` /// cameraMatrix optional 3x3 floating-point camera matrix CV_PROP_RW Mat cameraMatrix; /// distCoeffs optional vector of distortion coefficients CV_PROP_RW Mat distCoeffs; /// minMarkers number of adjacent markers that must be detected to return a charuco corner, default = 2 CV_PROP_RW int minMarkers; /// try to use refine board, default false CV_PROP_RW bool tryRefineMarkers; ```
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 13

**Code Changes:**
```diff
+
+namespace cv {
+namespace aruco {
+
+//! @addtogroup objdetect_aruco
+//! @{
+
+struct CV_EXPORTS_W_SIMPLE CharucoParameters {
+    CharucoParameters() {
+        minMarkers = 2;
+        tryRefineMarkers = false;
```

Review comment:
Documentation is still broken since #22368 . There is no `aruco` group: http://pullrequest.opencv.org/buildbot/export/pr/22986/docs/d5/d54/group__objdetect.html
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
> `class CV_EXPORTS_W CharucoBoard : public Board {` How many PImpl fields in this class with such inheritance? Must be one (for the discussion above).
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
Do you suggest make PImpl fields as `private` and prevent class inheritors using this field? In the `ImageCollection` (imgcodecs), `Model` (dnn), `IntelligentScissorsMB` classes `PImpl` fields set as `protected` and can be used by the class's inheritors.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
> private Where is it suggested? --- They must reuse the **single** "impl" field instead of adding a new one. See `Model` (dnn) inheritance pattern.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
``` /build/precommit_docs/4.x/opencv/modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp:13: warning: missing title after \defgroup objdetect_aruco ```
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
See how it looks in final docs: https://pullrequest.opencv.org/buildbot/export/pr/22986/docs/d5/d54/group__objdetect.html
**File:** modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp
**Change Type:** added
**Context:** PR #22986: Move contrib charuco to main objdetect
**Review Line:** 13

**Code Changes:**
```diff
+
+namespace cv {
+namespace aruco {
+
+//! @addtogroup objdetect_aruco
+//! @{
+
+struct CV_EXPORTS_W_SIMPLE CharucoParameters {
+    CharucoParameters() {
+        minMarkers = 2;
+        tryRefineMarkers = false;
```

Review comment:
Now this looks like this: ![image](https://user-images.githubusercontent.com/22337800/209177999-d9736984-3dee-436d-8ff6-ef1c8d3f89a2.png) Is it ok? https://pullrequest.opencv.org/buildbot/export/pr/22986/docs/d5/d54/group__objdetect.html
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
Now this looks like this: ![image](https://user-images.githubusercontent.com/22337800/209177999-d9736984-3dee-436d-8ff6-ef1c8d3f89a2.png) Is it ok? https://pullrequest.opencv.org/buildbot/export/pr/22986/docs/d5/d54/group__objdetect.html
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
fields `GridImpl` and `CharucoImpl` were removed from GridBoard, CharucoBoard
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -8,7 +8,7 @@
 
 namespace cv {
 namespace aruco {
-//! @addtogroup aruco
+//! @addtogroup objdetect_aruco
 //! @{
 
 class Dictionary;
@@ -22,29 +22,15 @@ class Dictionary;
```

Review comment:
So, change in `virtual void matchImagePoints()` is not needed anymore. --- BTW, too many unnecessary `Ptr<>` in implementation, especially without NULL checks. Reference should be used instead.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp
**Change Type:** modified
**Context:** PR #22986: Move contrib charuco to main objdetect

**Code Changes:**
```diff
@@ -10,28 +10,7 @@
 namespace cv {
 namespace aruco {
 
-/** @defgroup aruco ArUco Marker Detection
- * Square fiducial markers (also known as Augmented Reality Markers) are useful for easy,
- * fast and robust camera pose estimation.
- *
- * The main functionality of ArucoDetector class is detection of markers in an image. There are even more
- * functionalities implemented in the aruco contrib module (files aruco.hpp, charuco.hpp, aruco_calib.hpp):
```

Review comment:
No dots in headers