nareshmlx/opencv-pr huggingface dataset:
**File:** modules/videoio/src/cap_libcamera.hpp
**Change Type:** added
**Context:** PR #27254: modules/videoio: add libcamera backend for OpenCV VideoCapture - ### Feature: Add Libcamera backend **Summary:** This pull request introduc...
**Review Line:** 29

**Code Changes:**
```diff
+#include "cap_interface.hpp"
+
+namespace cv
+{
+
+    enum Exposure_Modes
+    {
+        EXPOSURE_NORMAL = libcamera::controls::ExposureNormal,
+        EXPOSURE_SHORT = libcamera::controls::ExposureShort,
+        EXPOSURE_CUSTOM = libcamera::controls::ExposureCustom
+    };
```

Review comment:
Avoid inner indentation in namespaces.
**File:** modules/videoio/src/cap_libcamera.cpp
**Change Type:** added
**Context:** PR #27254: modules/videoio: add libcamera backend for OpenCV VideoCapture - ### Feature: Add Libcamera backend **Summary:** This pull request introduc...
**Review Line:** 49

**Code Changes:**
```diff
+*/
+
+namespace cv
+{
+
+    LibcameraApp::LibcameraApp(std::unique_ptr<Options> opts)
+        : options_(std::move(opts)), controls_(controls::controls)
+
+    {
+        if (!options_)
+            options_ = std::make_unique<Options>();
```

Review comment:
Avoid inner indentation in namespaces.
**File:** modules/videoio/src/cap_libcamera.cpp
**Change Type:** added
**Context:** PR #27254: modules/videoio: add libcamera backend for OpenCV VideoCapture - ### Feature: Add Libcamera backend **Summary:** This pull request introduc...
**Review Line:** 1

**Code Changes:**
```diff
@@ -0,0 +1,1116 @@
+#include "precomp.hpp"
+#include <opencv2/core/utils/logger.hpp>
+#include <opencv2/core/utils/filesystem.hpp>
+#include <opencv2/videoio.hpp>
+#include "cap_interface.hpp"
+
```

Review comment:
Add OpenCV license header
**File:** modules/dnn/include/opencv2/dnn/dnn.hpp
**Change Type:** modified
**Context:** PR #27205: [WIP] [GSOC] KV Caching for LLM inference

**Code Changes:**
```diff
@@ -245,7 +245,8 @@ CV__DNN_INLINE_NS_BEGIN
         DNN_ARG_INPUT=2, //!< input of the whole model. Before Net::forward() or in Net::forward() all inputs must be set
         DNN_ARG_OUTPUT=3, //!< output of the model.
         DNN_ARG_TEMP=4,   //!< intermediate result, a result of some operation and input to some other operation(s).
-        DNN_ARG_PATTERN=5 //!< not used for now
+        DNN_ARG_PATTERN=5, //!< not used for now
+        DNN_ARG_CACHED=6 //!< cached argument, used in some operations to store intermediate results
     };
 
     CV_EXPORTS std::string argKindToString(ArgKind kind);
```

Review comment:
Please add brief description.
**File:** modules/dnn/src/net_impl.hpp
**Change Type:** modified
**Context:** PR #27205: [WIP] [GSOC] KV Caching for LLM inference

**Code Changes:**
```diff
@@ -87,6 +87,16 @@ struct Net::Impl : public detail::NetImplBase
     std::vector<Mat> scratchBufs;
     std::vector<Ptr<Graph> > allgraphs;
 
+    struct PageInfo {
+        // Cache pages
+        std::vector<cv::Mat> pages;
+        int curIdx = -1;            // index of last filled block
+        MatShape shape;        // shape of a single block (without the batch dim)
+        MatType dtype;
```

Review comment:
Please add reference to paper or some description.
**File:** modules/dnn/src/net_impl.hpp
**Change Type:** modified
**Context:** PR #27205: [WIP] [GSOC] KV Caching for LLM inference

**Code Changes:**
```diff
@@ -87,6 +87,16 @@ struct Net::Impl : public detail::NetImplBase
     std::vector<Mat> scratchBufs;
     std::vector<Ptr<Graph> > allgraphs;
 
+    struct PageInfo {
+        // Cache pages
+        std::vector<cv::Mat> pages;
+        int curIdx = -1;            // index of last filled block
+        MatShape shape;        // shape of a single block (without the batch dim)
+        MatType dtype;
```

Review comment:
I have updated the comment, hope that is sufficient
**File:** modules/stitching/src/exposure_compensate.cpp
**Change Type:** modified
**Context:** PR #27756: Resolved waring -Woverloaded-virtual on stitching module building
**Review Line:** 463

**Code Changes:**
```diff
@@ -460,8 +460,9 @@ void ChannelsCompensator::setMatGains(std::vector<Mat>& umv)
 
 
 template<class Compensator>
+
 void BlocksCompensator::feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
-                             const std::vector<std::pair<UMat,uchar> > &masks)
+                             const std::vector<std::pair<UMat,uchar> > &masks) CV_OVERRIDE
 {
     CV_Assert(corners.size() == images.size() && images.size() == masks.size());
```

Review comment:
Extra empty line is not needed here.
**File:** modules/stitching/src/exposure_compensate.cpp
**Change Type:** modified
**Context:** PR #27756: Resolved waring -Woverloaded-virtual on stitching module building
**Review Line:** 465

**Code Changes:**
```diff
 
 template<class Compensator>
+
 void BlocksCompensator::feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
-                             const std::vector<std::pair<UMat,uchar> > &masks)
+                             const std::vector<std::pair<UMat,uchar> > &masks) CV_OVERRIDE
 {
     CV_Assert(corners.size() == images.size() && images.size() == masks.size());
 
```

Review comment:
CV_OVERRIDE should be added in header file, but not implementation,
**File:** modules/stitching/src/exposure_compensate.cpp
**Change Type:** modified
**Context:** PR #27756: Resolved waring -Woverloaded-virtual on stitching module building
**Review Line:** 465

**Code Changes:**
```diff
 
 template<class Compensator>
+
 void BlocksCompensator::feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
-                             const std::vector<std::pair<UMat,uchar> > &masks)
+                             const std::vector<std::pair<UMat,uchar> > &masks) CV_OVERRIDE
 {
     CV_Assert(corners.size() == images.size() && images.size() == masks.size());
 
```

Review comment:
To be honest I wanted to contribute to this repository so badly that I messed up. It was hard for me to find the actual cause of that error so I took help from Gemini and I failed. I'm really 😔.
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py

**Code Changes:**
```diff
@@ -7,21 +7,23 @@
 # Python 2/3 compatibility
 from __future__ import print_function
 import sys
-
-# local modules
-from common import splitfn
-
-# built-in modules
+#builtin modules
```

Review comment:
Just `print` is not enough. Demo should call exit at least.
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py
**Review Line:** 24

**Code Changes:**
```diff
+        import tkinter as tk  # Python 3
+        from tkinter.scrolledtext import ScrolledText #Python3
+    elif sys.version_info[0] == 2:
+        import Tkinter as tk #Python2
+        from ScrolledText import ScrolledText #Python2
+except ImportError as importerr:
+    print("Error while importing prerequisite ", importerr)
+    sys.exit(2)
 
 
 #from IPython.Shell import IPShellEmbed
```

Review comment:
So, for Python 4.x it will not import anything. This is wrong. We should assume Python3 behavior.
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py

**Code Changes:**
```diff
@@ -7,21 +7,23 @@
 # Python 2/3 compatibility
 from __future__ import print_function
 import sys
-
-# local modules
-from common import splitfn
-
-# built-in modules
+#builtin modules
```

Review comment:
`exit()` status should not be zero (means normal exit code, no error). Not sure about python rules here, but we can use 2 here (usually used for missed files) Also there are several cases then window just blinks without feedback to user (missing "Press the <ENTER> key to continue...")
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py

**Code Changes:**
```diff
@@ -7,21 +7,23 @@
 # Python 2/3 compatibility
 from __future__ import print_function
 import sys
-
-# local modules
-from common import splitfn
-
-# built-in modules
+#builtin modules
```

Review comment:
added sys.exit()
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py
**Review Line:** 26

**Code Changes:**
```diff
+    elif sys.version_info[0] == 2:
+        import Tkinter as tk #Python2
+        from ScrolledText import ScrolledText #Python2
+except ImportError as importerr:
+    print("Error while importing prerequisite ", importerr)
+    sys.exit(2)
 
 
 #from IPython.Shell import IPShellEmbed
@@ -30,7 +32,7 @@
 exclude_list = ['demo', 'common']
```

Review comment:
added exit code 2 as suggested
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py
**Review Line:** 18

**Code Changes:**
```diff
-    import tkinter as tk  # Python 3
-    from tkinter.scrolledtext import ScrolledText
-except ImportError:
-    import Tkinter as tk  # Python 2
-    from ScrolledText import ScrolledText
+    if sys.version_info[0] >= 3:
+        import tkinter as tk  # Python 3
+        from tkinter.scrolledtext import ScrolledText #Python3
+    elif sys.version_info[0] == 2:
+        import Tkinter as tk #Python2
+        from ScrolledText import ScrolledText #Python2
```

Review comment:
For future python release
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py
**Review Line:** 55

**Code Changes:**
```diff
         self.links[tag] = action
         return "link", tag
 
-    def _enter(self, event):
+    def _enter(self):
         self.text.config(cursor="hand2")
-    def _leave(self, event):
+    def _leave(self):
         self.text.config(cursor="")
-    def _click(self, event):
+    def _click(self):
```

Review comment:
Why is it changed? (the change is "not compatible")
**File:** samples/python/demo.py
**Change Type:** modified
**Context:** PR #17995: Demo.py
**Review Line:** 55

**Code Changes:**
```diff
         self.links[tag] = action
         return "link", tag
 
-    def _enter(self, event):
+    def _enter(self):
         self.text.config(cursor="hand2")
-    def _leave(self, event):
+    def _leave(self):
         self.text.config(cursor="")
-    def _click(self, event):
+    def _click(self):
```

Review comment:
It is a callback function. Lint tool is stupid here. General rule of fixing something - avoid unnecessary changes.
**File:** modules/core/src/ocl.cpp
**Change Type:** modified
**Context:** PR #27638: fixed ocl.cpp data races without requiring additional locking
**Review Line:** 6605

**Code Changes:**
```diff
-            }
-            for (std::deque<UMatData*>::const_iterator i = q.begin(); i != q.end(); ++i)
-            {
-                deallocate_(*i);
-            }
+            cv::AutoLock lock(cleanupQueueMutex);
+            q.swap(cleanupQueue);
+        }
+
+        for (std::deque<UMatData*>::const_iterator i = q.begin(); i != q.end(); ++i)
+        {
```

Review comment:
Forcing mutex usage is a performance degradation.
**File:** modules/core/src/ocl.cpp
**Change Type:** modified
**Context:** PR #27638: fixed ocl.cpp data races without requiring additional locking
**Review Line:** 3503

**Code Changes:**
```diff
@@ -3500,7 +3500,7 @@ struct Kernel::Impl
 
     void addUMat(const UMat& m, bool dst)
     {
-        CV_Assert(nu < MAX_ARRS && m.u && m.u->urefcount > 0);
+        CV_Assert(nu < MAX_ARRS && m.u);
         u[nu] = m.u;
         CV_XADD(&m.u->urefcount, 1);
         nu++;
@@ -5670,9 +5670,6 @@ class OpenCLAllocator CV_FINAL : public MatAllocator
         if(!u)
```

Review comment:
We should not drop sanity checks. We don't need exact values of refcount, we just check that object is still alive (any value > 0).
**File:** modules/core/src/ocl.cpp
**Change Type:** modified
**Context:** PR #27638: fixed ocl.cpp data races without requiring additional locking
**Review Line:** 5674

**Code Changes:**
```diff
 
-        CV_Assert(u->urefcount == 0);
-        CV_Assert(u->refcount == 0 && "UMat deallocation error: some derived Mat is still alive");
-
         CV_Assert(u->handle != 0);
         CV_Assert(u->mapcount == 0);
 
@@ -6602,17 +6599,16 @@ class OpenCLAllocator CV_FINAL : public MatAllocator
 
     void flushCleanupQueue() const
     {
```

Review comment:
We should not drop sanity checks. We don't need exact values of refcount, we just check that object is still alive (any value > 0) or not.
**File:** modules/dnn/include/opencv2/dnn/all_layers.hpp
**Change Type:** modified
**Context:** PR #27570: clip13

**Code Changes:**
```diff
@@ -1382,6 +1382,12 @@ CV__DNN_INLINE_NS_BEGIN
         static Ptr<TriluLayer> create(const LayerParams& params);
     };
 
+    class CV_EXPORTS ClampLayer : public Layer
+    {
+    public:
+        static Ptr<ClampLayer> create(const LayerParams& params);
+    };
+
```

Review comment:
I think it's ok to name the layer as `ClipLayer` or `ClampLayer`
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** modified
**Context:** PR #27570: clip13

**Code Changes:**
```diff
@@ -1818,30 +1818,40 @@ void ONNXImporter::parseImageScaler(LayerParams& layerParams, const opencv_onnx:
 
 void ONNXImporter::parseClip(LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto)
 {
-    layerParams.type = "ReLU6";
-    float min_value = -FLT_MAX, max_value = FLT_MAX;
+
     int input_size = node_proto.input_size();
     CV_Check(input_size, 1 <= input_size && input_size <= 3, "");
-
```

Review comment:
Why do we still throw this exception if we can cover const+variable inputs by a new layer with ConstLayer connected inputs?
**File:** modules/dnn/src/onnx/onnx_importer2.cpp
**Change Type:** modified
**Context:** PR #27570: clip13

**Code Changes:**
```diff
@@ -1187,32 +1187,45 @@ void ONNXImporter2::parseImageScaler(LayerParams& layerParams, const opencv_onnx
 
 void ONNXImporter2::parseClip(LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto)
 {
-    layerParams.type = "ReLU6";
-    float min_value = -FLT_MAX, max_value = FLT_MAX;
     int input_size = node_proto.input_size();
     CV_Check(input_size, 1 <= input_size && input_size <= 3, "");
 
-    if (input_size >= 2 && !node_proto.input(1).empty())
```

Review comment:
``` input_size >= 3 && !node_proto.input(2).empty() && !net.isConstArg(node_inputs[2]) ``` ?
**File:** modules/dnn/src/onnx/onnx_importer2.cpp
**Change Type:** modified
**Context:** PR #27570: clip13

**Code Changes:**
```diff
@@ -1187,32 +1187,45 @@ void ONNXImporter2::parseImageScaler(LayerParams& layerParams, const opencv_onnx
 
 void ONNXImporter2::parseClip(LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto)
 {
-    layerParams.type = "ReLU6";
-    float min_value = -FLT_MAX, max_value = FLT_MAX;
     int input_size = node_proto.input_size();
     CV_Check(input_size, 1 <= input_size && input_size <= 3, "");
 
-    if (input_size >= 2 && !node_proto.input(1).empty())
```

Review comment:
basically, we can just check if the second inoput is non const. If it is not const, the `Clamp` layer has to be used. But for readability I added a check for the third input.
**File:** modules/dnn/src/onnx/onnx_importer2.cpp
**Change Type:** modified
**Context:** PR #27570: clip13

**Code Changes:**
```diff
@@ -1187,32 +1187,45 @@ void ONNXImporter2::parseImageScaler(LayerParams& layerParams, const opencv_onnx
 
 void ONNXImporter2::parseClip(LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto)
 {
-    layerParams.type = "ReLU6";
-    float min_value = -FLT_MAX, max_value = FLT_MAX;
     int input_size = node_proto.input_size();
     CV_Check(input_size, 1 <= input_size && input_size <= 3, "");
 
-    if (input_size >= 2 && !node_proto.input(1).empty())
```

Review comment:
I think that mixed case is also possible with `[Var, Const, Var]` inputs
**File:** CMakeLists.txt
**Change Type:** modified
**Context:** PR #24822: imgcodecs: Support Quite OK Image Format

**Code Changes:**
```diff
@@ -232,6 +232,7 @@ OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"          (WIN32
 OCV_OPTION(BUILD_PNG                "Build libpng from source"           (WIN32 OR ANDROID OR APPLE OR OPENCV_FORCE_3RDPARTY_BUILD) )
 OCV_OPTION(BUILD_OPENEXR            "Build openexr from source"          (OPENCV_FORCE_3RDPARTY_BUILD) )
 OCV_OPTION(BUILD_WEBP               "Build WebP from source"             (((WIN32 OR ANDROID OR APPLE) AND NOT WINRT) OR OPENCV_FORCE_3RDPARTY_BUILD) )
+OCV_OPTION(BUILD_QOI                "Build QOI from source"              (OPENCV_FORCE_3RDPARTY_BUILD) )
 OCV_OPTION(BUILD_TBB                "Download and build TBB from source" (ANDROID OR OPENCV_FORCE_3RDPARTY_BUILD) )
 OCV_OPTION(BUILD_IPP_IW             "Build IPP IW from source"           (NOT MINGW OR OPENCV_FORCE_3RDPARTY_BUILD) IF (X86_64 OR X86) AND NOT WINRT )
 OCV_OPTION(BUILD_ITT                "Build Intel ITT from source"
@@ -435,6 +436,9 @@ OCV_OPTION(WITH_MFX "Include Intel Media SDK support" OFF
 OCV_OPTION(WITH_GDAL "Include GDAL Support" OFF
```

Review comment:
Could you please add temporary test commit which enables this flag (to run CI tests)?
**File:** modules/imgcodecs/src/grfmt_qoi.cpp
**Change Type:** added
**Context:** PR #24822: imgcodecs: Support Quite OK Image Format

**Code Changes:**
```diff
@@ -0,0 +1,258 @@
+// 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 "utils.hpp"
+#include "bitstrm.hpp"
+#include "grfmt_qoi.hpp"
+#include <opencv2/core/utils/logger.hpp>
```

Review comment:
Please use short license header: https://github.com/opencv/opencv/wiki/Coding_Style_Guide#file-structure ``` // 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 ```
**File:** modules/imgcodecs/src/grfmt_qoi.cpp
**Change Type:** added
**Context:** PR #24822: imgcodecs: Support Quite OK Image Format

**Code Changes:**
```diff
@@ -0,0 +1,258 @@
+// 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 "utils.hpp"
+#include "bitstrm.hpp"
+#include "grfmt_qoi.hpp"
+#include <opencv2/core/utils/logger.hpp>
```

Review comment:
`CV_Check*` macro is preferable. `CV_Check(ncn, ncn == 3 || ncn == 4, "");`
**File:** modules/imgcodecs/src/grfmt_qoi.cpp
**Change Type:** added
**Context:** PR #24822: imgcodecs: Support Quite OK Image Format

**Code Changes:**
```diff
@@ -0,0 +1,258 @@
+// 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 "utils.hpp"
+#include "bitstrm.hpp"
+#include "grfmt_qoi.hpp"
+#include <opencv2/core/utils/logger.hpp>
```

Review comment:
I believe all CV_Assert() macros has been replaced to CV_Check*(). I have omitted some comments(3rd argument) that are self-explanatory.
**File:** 3rdparty/qoi/readme.md
**Change Type:** added
**Context:** PR #24822: imgcodecs: Support Quite OK Image Format

**Code Changes:**
```diff
@@ -0,0 +1,31 @@
+Extended qoi.h for OpenCV
+=========================
+This document is appendix described what is qoi.h extended for OpenCV.
+When updating qoi.h embedded in OpenCV, please refer this document.
+
+The base qoi.h has been downloaded from here.
+
+https://github.com/phoboslab/qoi/tree/827a7e4418ca75553e4396ca4e8c508c9dc07048
+
```

Review comment:
I recommend to add tag name or commit hash of QOI library used as base. In case of original library development it'll be easier to update it in OpenCV.
**File:** 3rdparty/qoi/readme.md
**Change Type:** added
**Context:** PR #24822: imgcodecs: Support Quite OK Image Format

**Code Changes:**
```diff
@@ -0,0 +1,31 @@
+Extended qoi.h for OpenCV
+=========================
+This document is appendix described what is qoi.h extended for OpenCV.
+When updating qoi.h embedded in OpenCV, please refer this document.
+
+The base qoi.h has been downloaded from here.
+
+https://github.com/phoboslab/qoi/tree/827a7e4418ca75553e4396ca4e8c508c9dc07048
+
```

Review comment:
Now I checked test runners, they are stopped. I'm sorry, I commit it. (And I replace it to `Extended qoi.h for OpenCV`).
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #27381: objdetect: added ColorNames features - **WIP** TODO: ``` @inproceedings{van2007applying, title={Applying color names to image description},...
**Review Line:** 714

**Code Changes:**
```diff
+public:
+    typedef Vec<uchar, 3> PixType;
+    typedef Vec<float, 10> FeatureType;
+    virtual ~ColorNamesFeatures() {}
+    CV_WRAP virtual void compute(InputArray image_patch, OutputArray feature_vector) = 0;
+    static Ptr<ColorNamesFeatures> create(const std::string & table_file);
+};
+//! @}
+
 //! @addtogroup objdetect_qrcode
 //! @{
```

Review comment:
I propose to add `create` with in-memory table. It's needed on iOS, Android and some other platforms.
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #27381: objdetect: added ColorNames features - **WIP** TODO: ``` @inproceedings{van2007applying, title={Applying color names to image description},...
**Review Line:** 711

**Code Changes:**
```diff
+//! @{
+class CV_EXPORTS_W ColorNamesFeatures
+{
+public:
+    typedef Vec<uchar, 3> PixType;
+    typedef Vec<float, 10> FeatureType;
+    virtual ~ColorNamesFeatures() {}
+    CV_WRAP virtual void compute(InputArray image_patch, OutputArray feature_vector) = 0;
+    static Ptr<ColorNamesFeatures> create(const std::string & table_file);
+};
+//! @}
```

Review comment:
Why do you need it in public API?
**File:** modules/dnn/include/opencv2/dnn/dnn.hpp
**Change Type:** modified
**Context:** PR #26483: Move numpy reader
**Review Line:** 2070

**Code Changes:**
```diff
@@ -2067,6 +2067,7 @@ CV__DNN_INLINE_NS_END
 
 #include <opencv2/dnn/layer.hpp>
 #include <opencv2/dnn/dnn.inl.hpp>
+#include <opencv2/dnn/utils/npy_blob.hpp>
 
 /// @deprecated Include this header directly from application. Automatic inclusion will be removed
 #include <opencv2/dnn/utils/inference_engine.hpp>
```

Review comment:
In general we don't import utilities by default with the module itself (e.g. `core/utility.hpp` or `dnn/shape_utils.hpp`).
**File:** modules/dnn/include/opencv2/dnn/utils/npy_blob.hpp
**Change Type:** added
**Context:** PR #26483: Move numpy reader
**Review Line:** 21

**Code Changes:**
```diff
+ *  - <i4 (int32)
+ *  - <i8 (int64)
+ *
+ *  Note: Only C-style ordering (fortran_order=False) is supported.
+ */
+CV_EXPORTS_W Mat blobFromNPY(const String& path);
+
+}} // namespace cv::dnn
+
+#endif // OPENCV_DNN_NPY_BLOB_HPP
\ No newline at end of file
```

Review comment:
Are these implementation and API secure (safe enough to handle malicious input)? At least there is no any protection against OOM DDOS attack.
**File:** modules/dnn/src/npy_blob.cpp
**Change Type:** renamed
**Context:** PR #26483: Move numpy reader
**Review Line:** 68

**Code Changes:**
```diff
     CV_Assert(magic == "\x93NUMPY");
 
-    ifs.ignore(1);  // Skip major version byte.
-    ifs.ignore(1);  // Skip minor version byte.
+    ifs.ignore(1);  // Skip major version byte
+    ifs.ignore(1);  // Skip minor version byte
 
     unsigned short headerSize;
     ifs.read((char*)&headerSize, sizeof(headerSize));
 
     std::string header(headerSize, '*');
```

Review comment:
We should not have that approach in production.