nareshmlx/opencv-pr huggingface dataset:
**File:** modules/videoio/src/videoio_registry.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -183,6 +183,18 @@ static const struct VideoBackendInfo builtin_backends[] =
     // dropped backends: MIL, TYZX
 };
 
+static const struct VideoDeprecatedBackendInfo deprecated_backends[] =
+{
+#ifdef _WIN32
+    {CAP_VFW, "Video for Windows"},
+#endif
+    {CAP_QT, "QuickTime"},
```

Review comment:
Unnecessary unrelated whitespace change.
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -212,6 +212,19 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
         CV_Error_(Error::StsError, ("could not open '%s'", filename.c_str()));
     }
 
+    if (cv::videoio_registry::checkDeprecatedBackend(apiPreference))
+    {
+        CV_LOG_DEBUG(NULL,
+            cv::format("VIDEOIO(%s): backend is removed from OpenCV",
+                cv::videoio_registry::getBackendName((VideoCaptureAPIs) apiPreference).c_str()));
+    }
```

Review comment:
1. Message is triggered in multiple scenarios: - backend is available, but video is not supported or camera is not available. Or passed parameters are not supported. - there is no backend support in the current build or it is explicitly disabled in runtime. They must be separated to avoid users confusion. 2. We should not see that message for `CAP_ANY`. 3. Wording should be adopted. "computer" is misused here - it can't help to enable some feature in OpenCV build. 4. Please run code and check messages - `builtwith` should not happen. 5. `cv::format()` is not really used here.
**File:** modules/videoio/src/videoio_registry.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -183,6 +183,18 @@ static const struct VideoBackendInfo builtin_backends[] =
     // dropped backends: MIL, TYZX
 };
 
+static const struct VideoDeprecatedBackendInfo deprecated_backends[] =
+{
+#ifdef _WIN32
+    {CAP_VFW, "Video for Windows"},
+#endif
+    {CAP_QT, "QuickTime"},
```

Review comment:
Why do we need manual `for` loop here?
**File:** modules/videoio/src/videoio_registry.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -183,6 +183,18 @@ static const struct VideoBackendInfo builtin_backends[] =
     // dropped backends: MIL, TYZX
 };
 
+static const struct VideoDeprecatedBackendInfo deprecated_backends[] =
+{
+#ifdef _WIN32
+    {CAP_VFW, "Video for Windows"},
+#endif
+    {CAP_QT, "QuickTime"},
```

Review comment:
We don't need that change here. It is out of scope of initial request.
**File:** modules/videoio/src/videoio_registry.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -183,6 +183,18 @@ static const struct VideoBackendInfo builtin_backends[] =
     // dropped backends: MIL, TYZX
 };
 
+static const struct VideoDeprecatedBackendInfo deprecated_backends[] =
+{
+#ifdef _WIN32
+    {CAP_VFW, "Video for Windows"},
+#endif
+    {CAP_QT, "QuickTime"},
```

Review comment:
We don't need that change here.
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -212,6 +212,19 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
         CV_Error_(Error::StsError, ("could not open '%s'", filename.c_str()));
     }
 
+    if (cv::videoio_registry::checkDeprecatedBackend(apiPreference))
+    {
+        CV_LOG_DEBUG(NULL,
+            cv::format("VIDEOIO(%s): backend is removed from OpenCV",
+                cv::videoio_registry::getBackendName((VideoCaptureAPIs) apiPreference).c_str()));
+    }
```

Review comment:
We can't transform` getDeprecatedBackends()` to `bool checkDeprecatedBackend(apiPreference)`. We need name of deprecated backend for message. So we can create `VideoDeprecatedBackendInfo getDeprecatedBackend(apiPreference)`, but we can't return message if we didn't find backend `deprecated_backends` list (for this we need to change `VideoDeprecatedBackendInfo` stuct ). We have options: - change `VideoDeprecatedBackendInfo` struct and make function `VideoDeprecatedBackendInfo getDeprecatedBackend(apiPreference)` - make `bool checkDeprecatedBackend(apiPreference)` function and make message without backend name - don't change the code and leave this triple copy-past What should I do?
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -212,6 +212,19 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
         CV_Error_(Error::StsError, ("could not open '%s'", filename.c_str()));
     }
 
+    if (cv::videoio_registry::checkDeprecatedBackend(apiPreference))
+    {
+        CV_LOG_DEBUG(NULL,
+            cv::format("VIDEOIO(%s): backend is removed from OpenCV",
+                cv::videoio_registry::getBackendName((VideoCaptureAPIs) apiPreference).c_str()));
+    }
```

Review comment:
For separating messages we need to create new list of all supported backends. available_backends creates when opencv builds. It depends on build flags and specifications of computer. We can't say is this api number supported or just an error without list of all supported backends. This message will not show for `CAP_ANY`. I double checked it.
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -212,6 +212,19 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
         CV_Error_(Error::StsError, ("could not open '%s'", filename.c_str()));
     }
 
+    if (cv::videoio_registry::checkDeprecatedBackend(apiPreference))
+    {
+        CV_LOG_DEBUG(NULL,
+            cv::format("VIDEOIO(%s): backend is removed from OpenCV",
+                cv::videoio_registry::getBackendName((VideoCaptureAPIs) apiPreference).c_str()));
+    }
```

Review comment:
> can't What is the problem? https://github.com/opencv/opencv/commit/872bb3255a9d87ee4be784b84fd30226a34d911e --- > We need name of deprecated backend There are changes in `getBackendName()`. Probably they are incomplete. Anyway they are not required for `checkDeprecatedBackend()`.
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -212,6 +212,19 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
         CV_Error_(Error::StsError, ("could not open '%s'", filename.c_str()));
     }
 
+    if (cv::videoio_registry::checkDeprecatedBackend(apiPreference))
+    {
+        CV_LOG_DEBUG(NULL,
+            cv::format("VIDEOIO(%s): backend is removed from OpenCV",
+                cv::videoio_registry::getBackendName((VideoCaptureAPIs) apiPreference).c_str()));
+    }
```

Review comment:
Not used anymore. Function itself is not needed. Structure should be dropped too.
**File:** modules/videoio/src/videoio_registry.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -183,6 +183,18 @@ static const struct VideoBackendInfo builtin_backends[] =
     // dropped backends: MIL, TYZX
 };
 
+static const struct VideoDeprecatedBackendInfo deprecated_backends[] =
+{
+#ifdef _WIN32
+    {CAP_VFW, "Video for Windows"},
+#endif
+    {CAP_QT, "QuickTime"},
```

Review comment:
unnecessary unrelated whitespace change here and below
**File:** modules/videoio/src/videoio_registry.cpp
**Change Type:** modified
**Context:** PR #23290: 4.x deprecated VideoCapture backends

**Code Changes:**
```diff
@@ -183,6 +183,18 @@ static const struct VideoBackendInfo builtin_backends[] =
     // dropped backends: MIL, TYZX
 };
 
+static const struct VideoDeprecatedBackendInfo deprecated_backends[] =
+{
+#ifdef _WIN32
+    {CAP_VFW, "Video for Windows"},
+#endif
+    {CAP_QT, "QuickTime"},
```

Review comment:
We don't need macro here, see https://github.com/opencv/opencv/commit/872bb3255a9d87ee4be784b84fd30226a34d911e
**File:** apps/interactive-calibration/main.cpp
**Change Type:** modified
**Context:** PR #23479: Charuco board into interactive calibration

**Code Changes:**
```diff
@@ -32,6 +32,12 @@ const std::string keys  =
         "{dst      | 295     | Distance between white and black parts of daulCircles template}"
         "{w        |         | Width of template (in corners or circles)}"
         "{h        |         | Height of template (in corners or circles)}"
+        "{ad       | DICT_4X4_50 | Name of predefined ArUco dictionary. Available ArUco dictionaries: "
+        "DICT_4X4_50, DICT_4X4_100, DICT_4X4_250, DICT_4X4_1000, DICT_5X5_50, DICT_5X5_100, DICT_5X5_250, "
+        "DICT_5X5_1000, DICT_6X6_50, DICT_6X6_100, DICT_6X6_250, DICT_6X6_1000, DICT_7X7_50, DICT_7X7_100, "
+        "DICT_7X7_250, DICT_7X7_1000, DICT_ARUCO_ORIGINAL, DICT_APRILTAG_16h5, DICT_APRILTAG_25h9, "
+        "DICT_APRILTAG_36h10, DICT_APRILTAG_36h11 }"
+        "{fad      | None    | name of file with ArUco dictionary}"
```

Review comment:
Name of pre-defined dictionary? I expect to see list of available Arcuo dict names and string values as input. Please stress that it's for ChAruco board only.
**File:** apps/interactive-calibration/main.cpp
**Change Type:** modified
**Context:** PR #23479: Charuco board into interactive calibration

**Code Changes:**
```diff
@@ -32,6 +32,12 @@ const std::string keys  =
         "{dst      | 295     | Distance between white and black parts of daulCircles template}"
         "{w        |         | Width of template (in corners or circles)}"
         "{h        |         | Height of template (in corners or circles)}"
+        "{ad       | DICT_4X4_50 | Name of predefined ArUco dictionary. Available ArUco dictionaries: "
+        "DICT_4X4_50, DICT_4X4_100, DICT_4X4_250, DICT_4X4_1000, DICT_5X5_50, DICT_5X5_100, DICT_5X5_250, "
+        "DICT_5X5_1000, DICT_6X6_50, DICT_6X6_100, DICT_6X6_250, DICT_6X6_1000, DICT_7X7_50, DICT_7X7_100, "
+        "DICT_7X7_250, DICT_7X7_1000, DICT_ARUCO_ORIGINAL, DICT_APRILTAG_16h5, DICT_APRILTAG_25h9, "
+        "DICT_APRILTAG_36h10, DICT_APRILTAG_36h11 }"
+        "{fad      | None    | name of file with ArUco dictionary}"
```

Review comment:
File name with custom Arcuco dictionary for Charuco board.
**File:** apps/interactive-calibration/parametersController.cpp
**Change Type:** modified
**Context:** PR #23479: Charuco board into interactive calibration

**Code Changes:**
```diff
@@ -3,6 +3,7 @@
 // of this distribution and at http://opencv.org/license.html.
 
 #include "parametersController.hpp"
+#include <opencv2/objdetect/aruco_dictionary.hpp>
 
 #include <iostream>
 
@@ -36,7 +37,6 @@ bool calib::parametersController::loadFromFile(const std::string &inputFileName)
         return true;
```

Review comment:
`Dict name must be >= 0` sounds very cryptic.
**File:** modules/dnn/src/model.cpp
**Change Type:** modified
**Context:** PR #22614: DNN: More stable DB text detection API

**Code Changes:**
```diff
@@ -21,7 +21,7 @@ struct Model::Impl
 
     Size   size;
     Scalar mean;
-    double  scale = 1.0;
+    Scalar scale = Scalar::all(1.0);
     bool   swapRB = false;
     bool   crop = false;
     Mat    blob;
@@ -60,7 +60,7 @@ struct Model::Impl
```

Review comment:
There is some kind of mess between `scale` and `std`. --- Right fix should include: - overload `blobFromImage()` API to support `Scalar scale` - overload `Model::setInputScale()` with `Scalar` input. Otherwise we introduce mess.
**File:** modules/dnn/src/model.cpp
**Change Type:** modified
**Context:** PR #22614: DNN: More stable DB text detection API

**Code Changes:**
```diff
@@ -21,7 +21,7 @@ struct Model::Impl
 
     Size   size;
     Scalar mean;
-    double  scale = 1.0;
+    Scalar scale = Scalar::all(1.0);
     bool   swapRB = false;
     bool   crop = false;
     Mat    blob;
@@ -60,7 +60,7 @@ struct Model::Impl
```

Review comment:
Because we have backward compatibility, I think this hack is necessary.
**File:** modules/dnn/src/model.cpp
**Change Type:** modified
**Context:** PR #22614: DNN: More stable DB text detection API
**Review Line:** 78

**Code Changes:**
```diff
@@ -75,7 +75,7 @@ struct Model::Impl
         mean = mean_;
     }
     /*virtual*/
-    void setInputScale(double scale_)
+    void setInputScale(const Scalar& scale_)
     {
         scale = scale_;
     }
@@ -97,7 +97,17 @@ struct Model::Impl
         if (size.empty())
```

Review comment:
Change `Module` API from `double` to `Scalar`.
**File:** modules/dnn/src/dnn_common.hpp
**Change Type:** modified
**Context:** PR #22614: DNN: More stable DB text detection API

**Code Changes:**
```diff
@@ -154,6 +154,21 @@ static inline std::string toString(const Mat& blob, const std::string& name = st
     return ss.str();
 }
 
+// Scalefactor is a common parameter used for data scaling. In OpenCV, we often use Scalar to represent it.
+// Because 0 is meaningless in scalefactor.
+// If the scalefactor is (x, 0, 0, 0), we convert it to (x, x, x, x). The following func will do this hack.
+static inline Scalar_<double> broadcastRealScalar(const Scalar_<double>& _scale)
+{
+    Scalar_<double> scale = _scale;
```

Review comment:
Should be `static` / `static inline` or moved to .cpp
**File:** modules/dnn/src/dnn_common.hpp
**Change Type:** modified
**Context:** PR #22614: DNN: More stable DB text detection API

**Code Changes:**
```diff
@@ -154,6 +154,21 @@ static inline std::string toString(const Mat& blob, const std::string& name = st
     return ss.str();
 }
 
+// Scalefactor is a common parameter used for data scaling. In OpenCV, we often use Scalar to represent it.
+// Because 0 is meaningless in scalefactor.
+// If the scalefactor is (x, 0, 0, 0), we convert it to (x, x, x, x). The following func will do this hack.
+static inline Scalar_<double> broadcastRealScalar(const Scalar_<double>& _scale)
+{
+    Scalar_<double> scale = _scale;
```

Review comment:
can we use some better name? say, broadcastRealScalar? Also, I agree that for now it should be put into some internal header and made inline function
**File:** modules/core/src/matrix_operations.cpp
**Change Type:** modified
**Context:** PR #13879: add REDUCE_SUM2 - proposal to add REDUCE_SUM2 to cv::reduce, an operation that sums up the square of elements

**Code Changes:**
```diff
@@ -341,29 +341,32 @@ cv::Mat cv::Mat::cross(InputArray _m) const
 namespace cv
 {
 
-template<typename T, typename ST, class Op> static void
-reduceR_( const Mat& srcmat, Mat& dstmat )
+template<typename T, typename ST, typename WT, class Op, class OpInit>
+class ReduceR_Invoker : public ParallelLoopBody
 {
-    typedef typename Op::rtype WT;
```

Review comment:
Remove `GET_OPTIMIZED()`. There is no corresponding function anyway. Also changes in "ReduceFunc" broke all corresponding calls (changes can be reverted, see corresponding comment).
**File:** modules/core/src/matrix_operations.cpp
**Change Type:** modified
**Context:** PR #13879: add REDUCE_SUM2 - proposal to add REDUCE_SUM2 to cv::reduce, an operation that sums up the square of elements

**Code Changes:**
```diff
@@ -341,29 +341,32 @@ cv::Mat cv::Mat::cross(InputArray _m) const
 namespace cv
 {
 
-template<typename T, typename ST, class Op> static void
-reduceR_( const Mat& srcmat, Mat& dstmat )
+template<typename T, typename ST, typename WT, class Op, class OpInit>
+class ReduceR_Invoker : public ParallelLoopBody
 {
-    typedef typename Op::rtype WT;
```

Review comment:
Implementation changes doesn't look good. What if you want to calculate product instead of sum? "0" value doesnt' work anymore IMHO, It is better to define separate "Init" functor: - NoOp for old cases - new SqValue ```.diff -buf[i] = src[i]; +buf[i] = initOp(src[i]); ```
**File:** modules/core/src/matrix_operations.cpp
**Change Type:** modified
**Context:** PR #13879: add REDUCE_SUM2 - proposal to add REDUCE_SUM2 to cv::reduce, an operation that sums up the square of elements

**Code Changes:**
```diff
@@ -341,29 +341,32 @@ cv::Mat cv::Mat::cross(InputArray _m) const
 namespace cv
 {
 
-template<typename T, typename ST, class Op> static void
-reduceR_( const Mat& srcmat, Mat& dstmat )
+template<typename T, typename ST, typename WT, class Op, class OpInit>
+class ReduceR_Invoker : public ParallelLoopBody
 {
-    typedef typename Op::rtype WT;
```

Review comment:
Good idea, I am on it
**File:** modules/dnn/src/layers/nary_eltwise_layers.cpp
**Change Type:** modified
**Context:** PR #23485: DNN: add ONNX where node support
**Review Line:** 506

**Code Changes:**
```diff
@@ -499,6 +502,120 @@ class NaryEltwiseLayerImpl CV_FINAL : public NaryEltwiseLayer
                 f, scale, ninputs, max_ndims, shapes[0], inp, out, (const size_t **) steps, ptrs);
     }
 
+    template <typename T, typename Functor>
+    void trinary_forward(const Functor& f, const std::vector<Mat>& inputs, std::vector<Mat>& outputs)
+    {
+        const Mat& a = inputs[0];
+        const Mat& b = inputs[1];
+        const Mat& c = inputs[2];
+        Mat& out = outputs[0];
```

Review comment:
To be honest it looks like we could change the original function to accept multiple inputs. E.g. make it accept (data + step) buffer. And everywhere where there is $i suffix (e.g. ptr1_, etc), we could use buffer as well. I think we had performance tests somewhere, we should check that it didn't degrade. If it does, we could have 1) fast binary path and 2) slower naray path.
**File:** modules/dnn/test/test_onnx_importer.cpp
**Change Type:** modified
**Context:** PR #23485: DNN: add ONNX where node support
**Review Line:** 2498

**Code Changes:**
```diff
 }
 
+TEST_P(Test_ONNX_layers, where_node)
+{
+    testONNXModels("where_layer");
+}
+
 INSTANTIATE_TEST_CASE_P(/**/, Test_ONNX_nets, dnnBackendsAndTargets());
 
 }} // namespace
```

Review comment:
Please add a test for broadcasting scenario.
**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:
it makes sense to remove _ before `objPoints`
**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 expect early function exit even before type check, if `detectedCorners` is empty.
**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:
sovePnP is not the only use case. Please mention solvePnP in see also list,
**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:
Why do you need dedicated method for it?
**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:
class `CharucoBoardImpl` contains field `objPoints` rename `_objPoints` to `outObjPoints`
**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:
For cv::Board and cv::GridBoard the method expects... For cv::CharucoBoard the method expects std::vector<Point2f> or Mat with ChAruco corners (chess board corners matched with Aruco markers).
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** modified
**Context:** PR #23138: fix charuco matchImagePoints

**Code Changes:**
```diff
@@ -129,25 +129,21 @@ struct CharucoDetector::CharucoDetectorImpl {
         // approximated pose estimation using marker corners
         Mat approximatedRvec, approximatedTvec;
         Mat objPoints, imgPoints; // object and image points for the solvePnP function
-        // printf("before board.matchImagePoints(markerCorners, markerIds, objPoints, imgPoints);\n");
-        board.matchImagePoints(markerCorners, markerIds, objPoints, imgPoints);
-        // printf("after board.matchImagePoints(markerCorners, markerIds, objPoints, imgPoints);\n");
+        Board simpleBoard(board.getObjPoints(), board.getDictionary(), board.getIds());
+        simpleBoard.matchImagePoints(markerCorners, markerIds, objPoints, imgPoints);
         if (objPoints.total() < 4ull)  // need, at least, 4 corners
```

Review comment:
Please remove commented printf.