nareshmlx/opencv-pr huggingface dataset:
**File:** modules/core/src/minmax.cpp
**Change Type:** modified
**Context:** PR #25553: Fix HAL interface for hal_ni_minMaxIdx
**Review Line:** 1525

**Code Changes:**
```diff
+    }
+    else if (src.isContinuous())
+    {
+        CALL_HAL(minMaxIdx, cv_hal_minMaxIdx, src.data, 0, (int)src.total()*cn, 1, src.depth(),
+                 minVal, maxVal, min_offset, max_offset, mask.data);
+    }
 
     CV_OVX_RUN(!ovx::skipSmallImages<VX_KERNEL_MINMAXLOC>(src.cols, src.rows),
                openvx_minMaxIdx(src, minVal, maxVal, minIdx, maxIdx, mask))
```

Review comment:
In this branch either minIdx and maxIdx need recalculating according to the number of dimensions, or this branch should be disabled if either pointer is non-null.
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
Why do you use old version from 3.4.1?
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
Link is invalid in new version.
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
If we want this link available in 5.x, we need to revert this pascal-classes.txt file
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
Why not just use `blobFromImage` for both cases?
**File:** modules/dnn/src/model.cpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -90,6 +90,11 @@ struct Model::Impl
     {
         swapRB = swapRB_;
     }
+    /*virtual*/
+    void setOutputNames(const std::vector<String>& outNames_)
+    {
+        outNames = outNames_;
+    }
 
```

Review comment:
No business logic in PImpl wrapper.
**File:** modules/dnn/include/opencv2/dnn/dnn.hpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -1444,6 +1444,11 @@ CV__DNN_INLINE_NS_BEGIN
          */
          CV_WRAP Model& setInputSwapRB(bool swapRB);
 
+         /** @brief Set output names for frame.
+          *  @param[in] outNames Names for output layers.
+         */
+         CV_WRAP Model& setOutputNames(const std::vector<String>& outNames);
+
          /** @brief Set preprocessing parameters for frame.
```

Review comment:
> void Setters should use reference through `return *this;`
**File:** modules/dnn/include/opencv2/dnn/dnn.hpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -1444,6 +1444,11 @@ CV__DNN_INLINE_NS_BEGIN
          */
          CV_WRAP Model& setInputSwapRB(bool swapRB);
 
+         /** @brief Set output names for frame.
+          *  @param[in] outNames Names for output layers.
+         */
+         CV_WRAP Model& setOutputNames(const std::vector<String>& outNames);
+
          /** @brief Set preprocessing parameters for frame.
```

Review comment:
Should it be added to a base `Model` class? I think it might be useful for different types of models.
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
Looks similar to https://github.com/opencv/opencv/blob/5.x/samples/data/dnn/object_detection_classes_pascal_voc.txt except `background` class
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
Look like the background is necessary for this test? Or should I generate it by random?
**File:** modules/dnn/include/opencv2/dnn/dnn.hpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -1444,6 +1444,11 @@ CV__DNN_INLINE_NS_BEGIN
          */
          CV_WRAP Model& setInputSwapRB(bool swapRB);
 
+         /** @brief Set output names for frame.
+          *  @param[in] outNames Names for output layers.
+         */
+         CV_WRAP Model& setOutputNames(const std::vector<String>& outNames);
+
          /** @brief Set preprocessing parameters for frame.
```

Review comment:
I added this method is used to select one specific output in the model. The model will output extra data for the auxiliary. Refrence: https://github.com/onnx/models/tree/main/validated/vision/object_detection_segmentation/fcn > The model has two outputs, ("out", "aux"). "out" is the main classifier and has shape (N, 21, height, width). Each output pixel is one-hot encoded, i.e. np.argmax(out[image, :, x, y]) is that pixel's predicted class. Class 0 is the background class > "aux" is an auxilliary classifier with the same shape performing the same functionality. The difference between the two is that "out" sources features from last layer of the ResNet backbone, while "aux" sources features from the second-to-last layer.
**File:** modules/dnn/include/opencv2/dnn/dnn.hpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -1444,6 +1444,11 @@ CV__DNN_INLINE_NS_BEGIN
          */
          CV_WRAP Model& setInputSwapRB(bool swapRB);
 
+         /** @brief Set output names for frame.
+          *  @param[in] outNames Names for output layers.
+         */
+         CV_WRAP Model& setOutputNames(const std::vector<String>& outNames);
+
          /** @brief Set preprocessing parameters for frame.
```

Review comment:
I will add this method to the Model class. Also as alekin said: "No business logic in PImpl wrapper."
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
The colors are ground truth. We need them to classify different types of object. ![2007_000392](https://github.com/opencv/opencv/assets/49567307/f73c4fa8-eea8-41f0-a582-111375331198)
**File:** modules/dnn/test/pascal_semsegm_test_fcn.py
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx

**Code Changes:**
```diff
@@ -5,7 +5,7 @@
 import argparse
 import time
 
-from imagenet_cls_test_alexnet import CaffeModel, DnnCaffeModel
+from imagenet_cls_test_alexnet import CaffeModel, DNNOnnxModel
 try:
     import cv2 as cv
 except ImportError:
@@ -58,14 +58,14 @@ def __init__(self):
```

Review comment:
It can be just dropped in the script
**File:** modules/dnn/test/test_model.cpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx
**Review Line:** 679

**Code Changes:**
```diff
     }
 
     std::string inp = _tf("dog416.png");
-    std::string weights_file = _tf("fcn8s-heavy-pascal.prototxt");
-    std::string config_file = _tf("fcn8s-heavy-pascal.caffemodel", false);
+    std::string weights_file = _tf("onnx/models/fcn-resnet50-12.onnx");
     std::string exp = _tf("segmentation_exp.png");
 
     Size size{128, 128};
-    double scale = 1.0;
-    Scalar mean = Scalar();
```

Review comment:
Should be optional?
**File:** modules/dnn/test/test_model.cpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx
**Review Line:** 679

**Code Changes:**
```diff
     }
 
     std::string inp = _tf("dog416.png");
-    std::string weights_file = _tf("fcn8s-heavy-pascal.prototxt");
-    std::string config_file = _tf("fcn8s-heavy-pascal.caffemodel", false);
+    std::string weights_file = _tf("onnx/models/fcn-resnet50-12.onnx");
     std::string exp = _tf("segmentation_exp.png");
 
     Size size{128, 128};
-    double scale = 1.0;
-    Scalar mean = Scalar();
```

Review comment:
Yes, second argument should be `false`.
**File:** modules/dnn/test/test_model.cpp
**Change Type:** modified
**Context:** PR #25435: change fcn8s-heavy-pascal tests from caffe to onnx
**Review Line:** 679

**Code Changes:**
```diff
     }
 
     std::string inp = _tf("dog416.png");
-    std::string weights_file = _tf("fcn8s-heavy-pascal.prototxt");
-    std::string config_file = _tf("fcn8s-heavy-pascal.caffemodel", false);
+    std::string weights_file = _tf("onnx/models/fcn-resnet50-12.onnx");
     std::string exp = _tf("segmentation_exp.png");
 
     Size size{128, 128};
-    double scale = 1.0;
-    Scalar mean = Scalar();
```

Review comment:
Fixed in https://github.com/opencv/opencv/pull/25538
**File:** modules/imgproc/test/test_boundingrect.cpp
**Change Type:** modified
**Context:** PR #25484: imgproc: improved test for boundingRect - This PR is intended to fix #25265. In order to do it we should: 1. Add proper reproducer as a tes...

**Code Changes:**
```diff
@@ -1,146 +1,86 @@
-/*M///////////////////////////////////////////////////////////////////////////////////////
-//
-//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
-//
-//  By downloading, copying, installing or using the software you agree to this license.
-//  If you do not agree to this license, do not download, install,
-//  copy or use the software.
-//
-//
```

Review comment:
> `i * 2` step should be one integer (4 bytes) to reproduce alignment issue.
**File:** modules/imgproc/src/geometry.cpp
**Change Type:** modified
**Context:** PR #25484: imgproc: improved test for boundingRect - This PR is intended to fix #25265. In order to do it we should: 1. Add proper reproducer as a tes...

**Code Changes:**
```diff
@@ -698,23 +698,24 @@ static Rect pointSetBoundingRect( const Mat& points )
         return Rect();
 
 #if CV_SIMD // TODO: enable for CV_SIMD_SCALABLE, loop tail related.
-    const int64_t* pts = points.ptr<int64_t>();
-
     if( !is_float )
     {
+        const int32_t* pts = points.ptr<int32_t>();
+        int64_t firstval = 0;
```

Review comment:
I'm not sure if using `std::memcpy` instead of union would be better in this case: ``` memcpy(&vali64, pts, 2 * sizeof(pts[0])); ```
**File:** modules/imgproc/src/geometry.cpp
**Change Type:** modified
**Context:** PR #25484: imgproc: improved test for boundingRect - This PR is intended to fix #25265. In order to do it we should: 1. Add proper reproducer as a tes...

**Code Changes:**
```diff
@@ -698,23 +698,24 @@ static Rect pointSetBoundingRect( const Mat& points )
         return Rect();
 
 #if CV_SIMD // TODO: enable for CV_SIMD_SCALABLE, loop tail related.
-    const int64_t* pts = points.ptr<int64_t>();
-
     if( !is_float )
     {
+        const int32_t* pts = points.ptr<int32_t>();
+        int64_t firstval = 0;
```

Review comment:
Without unions: `vx_setall_s64((int64_t)pts[0] | (int64_t)((uint64_t)pts[1] << 32))` ?
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25483: HAL API for meanStdDev

**Code Changes:**
```diff
@@ -843,6 +843,27 @@ inline int hal_ni_minMaxIdx(const uchar* src_data, size_t src_step, int width, i
 #define cv_hal_minMaxIdx hal_ni_minMaxIdx
 //! @endcond
 
+/**
+   @brief calculates the mean and the standard deviation of array elements independently for each channel
+   @param src_data Source image
+   @param src_step Source image
+   @param width Source image dimensions
+   @param height Source image dimensions
```

Review comment:
depth should be renamed to type, because potentially the function supports multi-channel images. There should also be a parameter (for the future) to compute the whole CxC standard deviation matrix (for C-channel array) or just C-element main diagonal of the matrix. The parameter could be named 'bool diagonal_stddev' and put immediately after stddev_val.
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25483: HAL API for meanStdDev
**Review Line:** 855

**Code Changes:**
```diff
+   @param width Source image dimensions
+   @param height Source image dimensions
+   @param src_type Type of source image
+   @param mean_val Array of per-channel mean values. May be nullptr, if mean value is not required.
+   @param stddev_val Array of per-channel standard deviation values. May be nullptr, if stddev value is not required.
+   @param mask Specified array region.
+   @param mask_step Mask array step.
+   @sa meanStdDev
+*/
+inline int hal_ni_meanStdDev(const uchar* src_data, size_t src_step, int width, int height,
+                             int src_type, double* mean_val, double* stddev_val, uchar* mask, size_t mask_step)
```

Review comment:
mask_step is missing
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25483: HAL API for meanStdDev

**Code Changes:**
```diff
@@ -843,6 +843,27 @@ inline int hal_ni_minMaxIdx(const uchar* src_data, size_t src_step, int width, i
 #define cv_hal_minMaxIdx hal_ni_minMaxIdx
 //! @endcond
 
+/**
+   @brief calculates the mean and the standard deviation of array elements independently for each channel
+   @param src_data Source image
+   @param src_step Source image
+   @param width Source image dimensions
+   @param height Source image dimensions
```

Review comment:
why not just use nullptr to identify that `mean_val` or `stddev_val` are not needed? Why have separate `..._needed` parameters?
**File:** modules/core/src/mean.dispatch.cpp
**Change Type:** modified
**Context:** PR #25483: HAL API for meanStdDev
**Review Line:** 559

**Code Changes:**
```diff
+        stddev_mat = _sdv.getMat();
+        int dcn = (int)stddev_mat.total();
+        CV_Assert( stddev_mat.type() == CV_64F && stddev_mat.isContinuous() &&
+                   (stddev_mat.cols == 1 || stddev_mat.rows == 1) && dcn >= cn );
+    }
+
+    if (src.isContinuous() && mask.isContinuous())
+    {
+        CALL_HAL(meanStdDev, cv_hal_meanStdDev, src.data, 0, (int)src.total(), 1, src.type(),
+                 _mean.needed() ? mean_mat.ptr<double>() : nullptr,
+                 _sdv.needed() ? stddev_mat.ptr<double>() : nullptr,
```

Review comment:
there should be check before 'HAL' section that `src.dims == mask.dims`. After that the check `src.dims <=2 && mask.dims <= 2` could be reduced to `src.dims <= 2`. Actually, not just the dimensionality should be the same, but also the shape. `src.size == mask.size` checks both things at once.
**File:** modules/imgproc/src/stackblur.cpp
**Change Type:** modified
**Context:** PR #25513: fix statckblur big kernel case
**Review Line:** 550

**Code Changes:**
```diff
@@ -547,7 +547,7 @@ class ParallelStackBlurRow : public ParallelLoopBody
         }
         else
         {
-            size_t bufSize = CN * (width + radius) * sizeof(TBuf) + 2 * CN * sizeof(TBuf);
+            size_t bufSize = CN * (width + kernelSize) * sizeof(TBuf) + 2 * CN * sizeof(TBuf);
             AutoBuffer<uchar> _buf(bufSize + 16);
             uchar* bufptr = alignPtr(_buf.data(), 16);
             TBuf* diffVal = (TBuf*)bufptr;
```

Review comment:
`kernelSize = radius*2 +1`, if the kernel size is bigger then width, we need to set a bigger buffer for it.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25490: Added moments interface to HAL.

**Code Changes:**
```diff
@@ -1028,6 +1028,38 @@ inline int hal_ni_canny(const uchar* src_data, size_t src_step, uchar* dst_data,
 #define cv_hal_canny hal_ni_canny
 //! @endcond
 
+/**
+   @brief Calculates all of the moments up to the third order of a polygon or rasterized shape for image
+   @param src_data Source image data
+   @param src_step Source image step
+   @param src_type source pints type
+   @param width Source image width
```

Review comment:
'src' data type specification missing
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25490: Added moments interface to HAL.

**Code Changes:**
```diff
@@ -1028,6 +1028,38 @@ inline int hal_ni_canny(const uchar* src_data, size_t src_step, uchar* dst_data,
 #define cv_hal_canny hal_ni_canny
 //! @endcond
 
+/**
+   @brief Calculates all of the moments up to the third order of a polygon or rasterized shape for image
+   @param src_data Source image data
+   @param src_step Source image step
+   @param src_type source pints type
+   @param width Source image width
```

Review comment:
1) 'src' data type specification is missing. 2) it should be renamed to hal_ni_polygonMoments, because the algorithm assumes that the input is not just a point cloud, it must be a polygon without self-intersections.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25490: Added moments interface to HAL.

**Code Changes:**
```diff
@@ -1028,6 +1028,38 @@ inline int hal_ni_canny(const uchar* src_data, size_t src_step, uchar* dst_data,
 #define cv_hal_canny hal_ni_canny
 //! @endcond
 
+/**
+   @brief Calculates all of the moments up to the third order of a polygon or rasterized shape for image
+   @param src_data Source image data
+   @param src_step Source image step
+   @param src_type source pints type
+   @param width Source image width
```

Review comment:
`src_type` added.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25490: Added moments interface to HAL.

**Code Changes:**
```diff
@@ -1028,6 +1028,38 @@ inline int hal_ni_canny(const uchar* src_data, size_t src_step, uchar* dst_data,
 #define cv_hal_canny hal_ni_canny
 //! @endcond
 
+/**
+   @brief Calculates all of the moments up to the third order of a polygon or rasterized shape for image
+   @param src_data Source image data
+   @param src_step Source image step
+   @param src_type source pints type
+   @param width Source image width
```

Review comment:
points => polygon
**File:** modules/videoio/src/cap_obsensor/obsensor_uvc_stream_channel.cpp
**Change Type:** modified
**Context:** PR #25523: videoio: obsensor: remove OB_EXT_CMD10 to suppress warning
**Review Line:** 48

**Code Changes:**
```diff
@@ -45,7 +45,6 @@ const uint8_t OB_EXT_CMD6[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0x7c, 0x00
 const uint8_t OB_EXT_CMD7[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfe, 0x12, 0x55, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
 const uint8_t OB_EXT_CMD8[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfe, 0x13, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
 const uint8_t OB_EXT_CMD9[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfa, 0x13, 0x4b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
-const uint8_t OB_EXT_CMD10[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfa, 0x13, 0x3f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 };
 const uint8_t OB_EXT_CMD11[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfe, 0x13, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 const uint8_t OB_EXT_CMD12[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfe, 0x13, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 };
 const uint8_t OB_EXT_CMD13[16] = { 0x47, 0x4d, 0x04, 0x00, 0x02, 0x00, 0xfa, 0x13, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
```

Review comment:
I propose to presume array values in comment or remove the line at all. In current version the command cannot be restored with `//` removal.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25509: HAL added for Otsu threshold

**Code Changes:**
```diff
@@ -856,6 +856,25 @@ inline int hal_ni_threshold(const uchar* src_data, size_t src_step, uchar* dst_d
 #define cv_hal_threshold hal_ni_threshold
 //! @endcond
 
+/**
+   @brief Performs threshold filtering using threshold estimated by Otsu algorithm
+   @param src_data Source image data
+   @param src_step Source image step
+   @param dst_data Destination image data
+   @param dst_step Destination image step
```

Review comment:
Do we really need this function? If we really need Otsu in HAL, I would simply add ``` int hal_ni_get_otsu_threshold(const uchar* src_data, size_t src_step, int width, int height, int depth, double* thresh) { return CV_HAL_ERROR_NOT_IMPLEMENTED; } ``` that is, I would add the function that computes value of Otsu threshold, and then simply call `hal_ni_threshold()` with the computed threshold value.
**File:** doc/tutorials/app/highgui_wayland_ubuntu.markdown
**Change Type:** added
**Context:** PR #25496: highgui: wayland: show "NO" status if dependency is missing

**Code Changes:**
```diff
@@ -0,0 +1,106 @@
+Using Wayland highgui-backend in Ubuntu {#tutorial_wayland_ubuntu}
+=======================================
+
+@tableofcontents
+
+@prev_tutorial{tutorial_intelperc}
+
+|    |    |
+| -: | :- |
```

Review comment:
Gray image is not obvious proof that the code works. I propose to show Lena image or something similar.
**File:** doc/tutorials/app/highgui_wayland_ubuntu.markdown
**Change Type:** added
**Context:** PR #25496: highgui: wayland: show "NO" status if dependency is missing

**Code Changes:**
```diff
@@ -0,0 +1,106 @@
+Using Wayland highgui-backend in Ubuntu {#tutorial_wayland_ubuntu}
+=======================================
+
+@tableofcontents
+
+@prev_tutorial{tutorial_intelperc}
+
+|    |    |
+| -: | :- |
```

Review comment:
It's bug. Please file ticket with the issue and reference to the PR. Will try to fix it for the release.
**File:** doc/tutorials/app/highgui_wayland_ubuntu.markdown
**Change Type:** added
**Context:** PR #25496: highgui: wayland: show "NO" status if dependency is missing

**Code Changes:**
```diff
@@ -0,0 +1,106 @@
+Using Wayland highgui-backend in Ubuntu {#tutorial_wayland_ubuntu}
+=======================================
+
+@tableofcontents
+
+@prev_tutorial{tutorial_intelperc}
+
+|    |    |
+| -: | :- |
```

Review comment:
I create https://github.com/opencv/opencv/issues/25497 . I test with GTK3 backend, it works well. Maybe only Wayland backend, it happens.