nareshmlx/opencv-pr huggingface dataset:
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
> `.at<float>` Missing type checks.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
> `.at<Point2f>` Missing type checks.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
> `.getMat()` This is an expensive method in general. Do NOT call it repeatedly in a for loops.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
> rocessed typo --- > Python bindings could add extra dimension ... if it is used in a wrong way.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
add Assert: `CV_Assert(... && detectedCharuco.depth() == CV_32F)` add Assert: `CV_Assert((int)detectedCharucoMat.channels() == 2)` for C++ case add Assert: `CV_Assert((int)detectedCharucoVecMat.front().total() * detectedCharucoVecMat.front().channels() == 2)` for python binding case
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
add Assert: CV_Assert(... && detectedCharuco.depth() == CV_32F) add Assert: CV_Assert((int)detectedCharucoMat.channels() == 2) for C++ case add Assert: CV_Assert((int)detectedCharucoVecMat.front().total() * detectedCharucoVecMat.front().channels() == 2) for python binding case
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
remove `.getMat()` from loops
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
fixed typo
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
What is happen with `detectedCorners.isUMatVector()` support?
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
Use `CV_Check*()` macros instead of `CV_Assert()`.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 405

**Code Changes:**
```diff
+        int pointId = detectedIdsMat.at<int>((int)i);
+        CV_Assert(pointId >= 0 && pointId < (int)chessboardCorners.size());
+        objPnts[i] = chessboardCorners[pointId];
+        if (detectedCharuco.isMatVector()) {
+            CV_Assert((int)detectedCharucoVecMat[i].total() * detectedCharucoVecMat[i].channels() == 2);
+            imgPnts[i] = detectedCharucoVecMat[i].ptr<Point2f>(0)[0];
         }
-        Mat(objPnts).copyTo(_objPoints);
-        Mat(imgPnts).copyTo(imgPoints);
+        else
+            imgPnts[i] = detectedCharucoMat.ptr<Point2f>(0)[i];
```

Review comment:
Missing checks for `detectedCharucoVecMat[i]` type and size.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
Other OpenCV code uses `checkVector()` API. Behavior should be consistent.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
> `// python binding case` Why? That stuff is like "jpg" limitation in samples.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
Why is the first element is verified only? Missing type check.
**File:** modules/objdetect/test/test_charucodetection.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -656,4 +656,31 @@ TEST(Charuco, issue_14014)
     EXPECT_EQ(Size(4, 1), rejectedPoints[0].size()); // check dimension of rejected corners after successfully refine
 }
 
+
+TEST(Charuco, testmatchImagePoints)
+{
+    aruco::CharucoBoard board(Size(2, 3), 1.f, 0.5f, aruco::getPredefinedDictionary(aruco::DICT_4X4_50));
+    auto chessboardPoints = board.getChessboardCorners();
+
```

Review comment:
> `= board` unnecessary double space
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 376

**Code Changes:**
```diff
-        for(size_t i = 0ull; i < nDetected; i++) {
-            int pointId = detectedIds.getMat().at<int>((int)i);
-            CV_Assert(pointId >= 0 && pointId < (int)chessboardCorners.size());
-            objPnts[i] = chessboardCorners[pointId];
-            imgPnts[i] = detectedCorners.getMat().at<Point2f>((int)i);
+void CharucoBoardImpl::matchImagePoints(InputArrayOfArrays detectedCharuco, InputArray detectedIds,
+                                        OutputArray outObjPoints, OutputArray outImgPoints) const {
+    CV_CheckEQ(detectedIds.total(), detectedCharuco.total(), "Number of corners and ids must be equal");
+    CV_Assert(detectedIds.total() > 0ull);
+    CV_Assert(detectedCharuco.depth() == CV_32F);
+    // detectedCharuco includes charuco corners as vector<Point2f> or Mat.
```

Review comment:
> `InputArrayOfArrays` If we want to support multiple boards (not sure how if class is a `Board`) and we need `InputArrayOfArrays` here then `detectedIds` should be `InputArrayOfArrays` too.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 78

**Code Changes:**
```diff
+     * @param imgPoints Vector of marker points in the image coordinate space.
+     * For any Board class the method expects std::vector<cv::Point2f> objectPoints or cv::Mat
+     *
+     * @sa solvePnP
      */
     CV_WRAP void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds,
                                   OutputArray objPoints, OutputArray imgPoints) const;
```

Review comment:
> matchImagePoints Why do we have such name? There is no matching performed. It is just a simple mapping. Coordinates extraction from the distionary. `getImagePoint()` would be much clear. Class name is `Board` (not Boards), so `InputArrayOfArrays` requirement looks strange. For multiple boards there should be different "Boards" with own methods.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -58,14 +58,22 @@ class CV_EXPORTS_W_SIMPLE Board {
     CV_WRAP const Point3f& getRightBottomCorner() const;
 
     /** @brief Given a board configuration and a set of detected markers, returns the corresponding
-     * image points and object points to call solvePnP()
+     * image points and object points, can be used in solvePnP()
      *
      * @param detectedCorners List of detected marker corners of the board.
-     * For CharucoBoard class you can set list of charuco corners.
-     * @param detectedIds List of identifiers for each marker or list of charuco identifiers for each corner.
```

Review comment:
unnecessary double space
**File:** modules/objdetect/misc/python/test/test_objdetect_aruco.py
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 320

**Code Changes:**
```diff
 
+    def test_aruco_match_image_points(self):
+        aruco_dict = cv.aruco.getPredefinedDictionary(cv.aruco.DICT_4X4_50)
+        board_size = (3, 4)
+        board = cv.aruco.GridBoard(board_size, 5.0, 1.0, aruco_dict)
+        aruco_corners = np.array(board.getObjPoints())[:, :, :2]
+        aruco_ids = board.getIds()
+        obj_points, img_points = board.matchImagePoints(aruco_corners, aruco_ids)
+        aruco_corners = aruco_corners.reshape(-1, 2)
+
+        self.assertEqual(aruco_corners.shape[0], obj_points.shape[0])
```

Review comment:
It would be nice to see somewhere here comment about `3D -> 2D` conversion.
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -58,14 +58,22 @@ class CV_EXPORTS_W_SIMPLE Board {
     CV_WRAP const Point3f& getRightBottomCorner() const;
 
     /** @brief Given a board configuration and a set of detected markers, returns the corresponding
-     * image points and object points to call solvePnP()
+     * image points and object points, can be used in solvePnP()
      *
      * @param detectedCorners List of detected marker corners of the board.
-     * For CharucoBoard class you can set list of charuco corners.
-     * @param detectedIds List of identifiers for each marker or list of charuco identifiers for each corner.
```

Review comment:
Which board implementation returns output `imgPoint` which is not the same to `detectedCorners`?
**File:** modules/objdetect/test/test_charucodetection.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -656,4 +656,31 @@ TEST(Charuco, issue_14014)
     EXPECT_EQ(Size(4, 1), rejectedPoints[0].size()); // check dimension of rejected corners after successfully refine
 }
 
+
+TEST(Charuco, testmatchImagePoints)
+{
+    aruco::CharucoBoard board(Size(2, 3), 1.f, 0.5f, aruco::getPredefinedDictionary(aruco::DICT_4X4_50));
+    auto chessboardPoints = board.getChessboardCorners();
+
```

Review comment:
> detectedCharucoCorners > objPoints Test check that they are the same. So why do we need such API? We should avoid redundancy.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
add `UMatVector()` support,
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
add: `CV_CheckEQ(detectedIds.total(), detectedCharuco.total(), "Number of corners and ids must be equal");`
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
I have seen in most cases the use of `CV_Assert`. Is this a new standard? Now always add `CV_Check()` instead of `CV_Assert()`?
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 405

**Code Changes:**
```diff
+        int pointId = detectedIdsMat.at<int>((int)i);
+        CV_Assert(pointId >= 0 && pointId < (int)chessboardCorners.size());
+        objPnts[i] = chessboardCorners[pointId];
+        if (detectedCharuco.isMatVector()) {
+            CV_Assert((int)detectedCharucoVecMat[i].total() * detectedCharucoVecMat[i].channels() == 2);
+            imgPnts[i] = detectedCharucoVecMat[i].ptr<Point2f>(0)[0];
         }
-        Mat(objPnts).copyTo(_objPoints);
-        Mat(imgPnts).copyTo(imgPoints);
+        else
+            imgPnts[i] = detectedCharucoMat.ptr<Point2f>(0)[i];
```

Review comment:
added `CV_Assert((int)detectedCharucoVecMat[i].total() * detectedCharucoVecMat[i].channels() == 2);`
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -27,17 +27,17 @@ struct Board::Impl {
     Impl(const Impl&) = delete;
     Impl& operator=(const Impl&) = delete;
 
-    virtual void matchImagePoints(InputArray detectedCorners, InputArray detectedIds, OutputArray _objPoints,
+    virtual void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray _objPoints,
                                   OutputArray imgPoints) const;
 
     virtual void generateImage(Size outSize, OutputArray img, int marginSize, int borderBits) const;
 };
```

Review comment:
Is it necessary to do this? This expression `CV_Assert\([a-z, !,_]*.channels()` is used more often than `checkVector` ![image](https://user-images.githubusercontent.com/22337800/233490777-4d3f1b3f-6152-4caf-9f7b-930f916c2247.png) ![image](https://user-images.githubusercontent.com/22337800/233491179-22294c00-9ec5-4e19-8057-01cddface7fb.png)
**File:** modules/objdetect/include/opencv2/objdetect/aruco_board.hpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 78

**Code Changes:**
```diff
+     * @param imgPoints Vector of marker points in the image coordinate space.
+     * For any Board class the method expects std::vector<cv::Point2f> objectPoints or cv::Mat
+     *
+     * @sa solvePnP
      */
     CV_WRAP void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds,
                                   OutputArray objPoints, OutputArray imgPoints) const;
```

Review comment:
I suggest just fixing the bug for now. I will change the API in the following PRs.
**File:** modules/objdetect/src/aruco/aruco_board.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints
**Review Line:** 376

**Code Changes:**
```diff
-        for(size_t i = 0ull; i < nDetected; i++) {
-            int pointId = detectedIds.getMat().at<int>((int)i);
-            CV_Assert(pointId >= 0 && pointId < (int)chessboardCorners.size());
-            objPnts[i] = chessboardCorners[pointId];
-            imgPnts[i] = detectedCorners.getMat().at<Point2f>((int)i);
+void CharucoBoardImpl::matchImagePoints(InputArrayOfArrays detectedCharuco, InputArray detectedIds,
+                                        OutputArray outObjPoints, OutputArray outImgPoints) const {
+    CV_CheckEQ(detectedIds.total(), detectedCharuco.total(), "Number of corners and ids must be equal");
+    CV_Assert(detectedIds.total() > 0ull);
+    CV_Assert(detectedCharuco.depth() == CV_32F);
+    // detectedCharuco includes charuco corners as vector<Point2f> or Mat.
```

Review comment:
I suggest just fixing the bug for now. I will change the API in the following PRs.
**File:** modules/objdetect/test/test_charucodetection.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -656,4 +656,31 @@ TEST(Charuco, issue_14014)
     EXPECT_EQ(Size(4, 1), rejectedPoints[0].size()); // check dimension of rejected corners after successfully refine
 }
 
+
+TEST(Charuco, testmatchImagePoints)
+{
+    aruco::CharucoBoard board(Size(2, 3), 1.f, 0.5f, aruco::getPredefinedDictionary(aruco::DICT_4X4_50));
+    auto chessboardPoints = board.getChessboardCorners();
+
```

Review comment:
They (`detectedCharucoCorners` and `objPoints`) were same only in this test changed the value to make the test more realistic