nareshmlx/opencv-pr huggingface dataset:
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #24233: Add HAL implementation hooks to cv::flip() and cv::rotate() functions from core module

**Code Changes:**
```diff
@@ -731,6 +731,47 @@ 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 hal_flip
+   @param src_type source and destination image type
+   @param src_data source image data
+   @param src_step source image step
+   @param src_width source and destination image width
```

Review comment:
`rotate` => `rotate90` To avoid confusion with generic rotation.
**File:** modules/imgproc/src/color_yuv.simd.hpp
**Change Type:** modified
**Context:** PR #24333: Implement color conversion from RGB to YUV422 family

**Code Changes:**
```diff
@@ -37,6 +37,10 @@ void cvtOnePlaneYUVtoBGR(const uchar * src_data, size_t src_step,
                          uchar * dst_data, size_t dst_step,
                          int width, int height,
                          int dcn, bool swapBlue, int uIdx, int ycn);
+void cvtOnePlaneBGRtoYUV(const uchar * src_data, size_t src_step,
+                         uchar * dst_data, size_t dst_step,
+                         int width, int height,
+                         int scn, bool swapBlue, int uIdx, int ycn);
 
 #ifndef CV_CPU_OPTIMIZATION_DECLARATIONS_ONLY
```

Review comment:
Please add reference to source of coefficients.
**File:** modules/imgproc/src/opencl/color_yuv.cl
**Change Type:** modified
**Context:** PR #24333: Implement color conversion from RGB to YUV422 family

**Code Changes:**
```diff
@@ -568,6 +568,76 @@ __kernel void YUV2RGB_422(__global const uchar* srcptr, int src_step, int src_of
     }
 }
 
+// Coefficients based on ITU.BT-601, ISBN 1-878707-09-4 (https://fourcc.org/fccyvrgb.php)
+// The conversion coefficients for RGB to YUV422 are based on the ones for RGB to YUV.
+// For both Y components, the coefficients are applied as given in the link to each input RGB pixel
+// separately. For U and V, they are reduced by half to account for two RGB pixels contributing
+// to the same U and V values. In other words, the U and V contributions from the two RGB pixels
+// are averaged. The integer versions are obtained by multiplying the float versions by 16384
```

Review comment:
Please add reference to source of coefficients.
**File:** modules/imgproc/test/test_cvtyuv.cpp
**Change Type:** modified
**Context:** PR #24333: Implement color conversion from RGB to YUV422 family
**Review Line:** 646

**Code Changes:**
```diff
+template<class convertor>
+void referenceRGB2YUV422(const Mat& rgb, Mat& yuv, RGBreader* rgbReader, YUVwriter* yuvWriter)
+{
+    convertor cvt;
+
+    for(int row = 0; row < rgb.rows; ++row)
+    {
+            for(int col = 0; col < rgb.cols; col+=2)
+            {
+                yuvWriter->write(yuv, row, col, cvt.convert(rgbReader->read(rgb, row, col), rgbReader->read(rgb, row, col+1), 0));
+                yuvWriter->write(yuv, row, col+1, cvt.convert(rgbReader->read(rgb, row, col), rgbReader->read(rgb, row, col+1), 1));
```

Review comment:
Please add brackets too.
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** modified
**Context:** PR #24354: Removed invalid reference usage in charuco detector
**Review Line:** 33

**Code Changes:**
```diff
-        const Mat& chCorners = charucoCorners.getMat();
-        const Mat& chIds = charucoIds.getMat();
+        const Mat mIds = markerIds.getMat();
+        const Mat chCorners = charucoCorners.getMat();
+        const Mat chIds = charucoIds.getMat();
         const vector<int>& boardIds = board.getIds();
 
-        const vector<vector<int> >& nearestMarkerIdx = board.getNearestMarkerIdx();
+        const vector<vector<int> > nearestMarkerIdx = board.getNearestMarkerIdx();
         vector<Point2f> distance(board.getNearestMarkerIdx().size(), Point2f(0.f, std::numeric_limits<float>::max()));
         // distance[i].x: max distance from the i-th charuco corner to charuco corner-forming markers.
```

Review comment:
getIds() returns a `const vector<int>&` so this is fine
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** modified
**Context:** PR #24354: Removed invalid reference usage in charuco detector

**Code Changes:**
```diff
@@ -27,13 +27,12 @@ struct CharucoDetector::CharucoDetectorImpl {
     bool checkBoard(InputArrayOfArrays markerCorners, InputArray markerIds, InputArray charucoCorners, InputArray charucoIds) {
         vector<Mat> mCorners;
         markerCorners.getMatVector(mCorners);
-        const Mat& mIds = markerIds.getMat();
-
-        const Mat& chCorners = charucoCorners.getMat();
-        const Mat& chIds = charucoIds.getMat();
+        const Mat mIds = markerIds.getMat();
+        const Mat chCorners = charucoCorners.getMat();
```

Review comment:
on the other hand, getNearestMarkerIdx returns a `std::vector<std::vector<int>>` and you have another reference to a temp object. This function should actually return a `const &` too. `getChessboardCorners` and `getNearestMarkerCorners` too BTW, then again, that would break the API (slightly). You call onn whether you fix those functions or replace that line with `const vector<vector<int> > nearestMarkerIdx` (no ref).
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** modified
**Context:** PR #24354: Removed invalid reference usage in charuco detector

**Code Changes:**
```diff
@@ -27,13 +27,12 @@ struct CharucoDetector::CharucoDetectorImpl {
     bool checkBoard(InputArrayOfArrays markerCorners, InputArray markerIds, InputArray charucoCorners, InputArray charucoIds) {
         vector<Mat> mCorners;
         markerCorners.getMatVector(mCorners);
-        const Mat& mIds = markerIds.getMat();
-
-        const Mat& chCorners = charucoCorners.getMat();
-        const Mat& chIds = charucoIds.getMat();
+        const Mat mIds = markerIds.getMat();
+        const Mat chCorners = charucoCorners.getMat();
```

Review comment:
BTW, you can keep the const here too.
**File:** modules/core/src/matmul.simd.hpp
**Change Type:** modified
**Context:** PR #24325: Rewrite Universal Intrinsic code: float related part
**Review Line:** 2552

**Code Changes:**
```diff
@@ -2549,6 +2549,7 @@ double dotProd_16s(const short* src1, const short* src2, int len)
 double dotProd_32s(const int* src1, const int* src2, int len)
 {
 #if CV_SIMD_64F // TODO: enable for CV_SIMD_SCALABLE_64F
+// Test failed on RVV(QEMU): Too big difference (=1.20209e-08 > 1.11022e-12)
     double r = .0;
     int i = 0;
     const int step  = VTraits<v_int32>::vlanes();
```

Review comment:
Please create Github issue for the case.
**File:** modules/core/test/test_io.cpp
**Change Type:** modified
**Context:** PR #24343: Fix tests writing to current work dir - Several tests were writing files in the current work directory and did not clean up after test. Mov...
**Review Line:** 844

**Code Changes:**
```diff
-        "core_io_base64_other_test.yml",
-        "core_io_base64_other_test.xml",
-        "core_io_base64_other_test.json",
         "core_io_base64_other_test.yml",
         "core_io_base64_other_test.xml",
         "core_io_base64_other_test.json",
@@ -852,14 +850,16 @@ TEST(Core_InputOutput, filestorage_base64_valid_call)
 
     for (int n = 0; n < 6; n++)
     {
-        char const* suffix_name = filenames[n];
```

Review comment:
Why do you remove it?
**File:** modules/core/test/test_io.cpp
**Change Type:** modified
**Context:** PR #24343: Fix tests writing to current work dir - Several tests were writing files in the current work directory and did not clean up after test. Mov...
**Review Line:** 844

**Code Changes:**
```diff
-        "core_io_base64_other_test.yml",
-        "core_io_base64_other_test.xml",
-        "core_io_base64_other_test.json",
         "core_io_base64_other_test.yml",
         "core_io_base64_other_test.xml",
         "core_io_base64_other_test.json",
@@ -852,14 +850,16 @@ TEST(Core_InputOutput, filestorage_base64_valid_call)
 
     for (int n = 0; n < 6; n++)
     {
-        char const* suffix_name = filenames[n];
```

Review comment:
In this test we iterate over 3 formats (yml, xml,json) and 2 modes (default, base64). These two arrays contained 6 items each for actual file name and accessed file name (with base64 suffix). I've replaced these arrays with calculated values: `name = filename[n/2]`, `suffix = n%2 ? '' : 'base64'`.
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** modified
**Context:** PR #24126: fix charuco checkBoard

**Code Changes:**
```diff
@@ -5,6 +5,7 @@
 #include "../precomp.hpp"
 
 #include <opencv2/calib3d.hpp>
+#include <opencv2/core/utils/logger.hpp>
 #include "opencv2/objdetect/charuco_detector.hpp"
 #include "aruco_utils.hpp"
 
@@ -26,12 +27,13 @@ struct CharucoDetector::CharucoDetectorImpl {
     bool checkBoard(InputArrayOfArrays markerCorners, InputArray markerIds, InputArray charucoCorners, InputArray charucoIds) {
```

Review comment:
It's obvious from the function output. Is not it?
**File:** modules/objdetect/src/aruco/charuco_detector.cpp
**Change Type:** modified
**Context:** PR #24126: fix charuco checkBoard

**Code Changes:**
```diff
@@ -5,6 +5,7 @@
 #include "../precomp.hpp"
 
 #include <opencv2/calib3d.hpp>
+#include <opencv2/core/utils/logger.hpp>
 #include "opencv2/objdetect/charuco_detector.hpp"
 #include "aruco_utils.hpp"
 
@@ -26,12 +27,13 @@ struct CharucoDetector::CharucoDetectorImpl {
     bool checkBoard(InputArrayOfArrays markerCorners, InputArray markerIds, InputArray charucoCorners, InputArray charucoIds) {
```

Review comment:
I tell the user that there is a flag disabling the function checkBoard().
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #24323: Allow limiting the number of keypoints in AKAZE keypoint detector
**Review Line:** 900

**Code Changes:**
```diff
     CV_WRAP static Ptr<AKAZE> create(AKAZE::DescriptorType descriptor_type = AKAZE::DESCRIPTOR_MLDB,
                                      int descriptor_size = 0, int descriptor_channels = 3,
                                      float threshold = 0.001f, int nOctaves = 4,
-                                     int nOctaveLayers = 4, KAZE::DiffusivityType diffusivity = KAZE::DIFF_PM_G2);
+                                     int nOctaveLayers = 4, KAZE::DiffusivityType diffusivity = KAZE::DIFF_PM_G2,
+                                     int max_points = -1);
 
     CV_WRAP virtual void setDescriptorType(AKAZE::DescriptorType dtype) = 0;
     CV_WRAP virtual AKAZE::DescriptorType getDescriptorType() const = 0;
@@ -916,6 +920,9 @@ class CV_EXPORTS_W AKAZE : public Feature2D
     CV_WRAP virtual void setDiffusivity(KAZE::DiffusivityType diff) = 0;
```

Review comment:
Please update documentation.
**File:** modules/imgproc/src/distransform.cpp
**Change Type:** modified
**Context:** PR #24234: Change max distance at distanceTransform

**Code Changes:**
```diff
@@ -45,24 +45,23 @@ namespace cv
 {
 
 static const int DIST_SHIFT = 16;
-static const int INIT_DIST0 = INT_MAX;
-static const int DIST_MAX   = (INT_MAX >> 2);
 #define  CV_FLT_TO_FIX(x,n)  cvRound((x)*(1<<(n)))
 
 static void
-initTopBottom( Mat& temp, int border )
```

Review comment:
> `.ptr<unsigned int>` There is no support for 32U in `cv::Mat`. This call is not valid. --- `int` -> `unsigned int` may be not enough anyway. Large images may require `uint64_t` to avoid overflows (very large images would still overflow anyway). BTW, `uint64_t` is not supported by `Mat` too.
**File:** modules/imgproc/src/distransform.cpp
**Change Type:** modified
**Context:** PR #24234: Change max distance at distanceTransform

**Code Changes:**
```diff
@@ -45,24 +45,23 @@ namespace cv
 {
 
 static const int DIST_SHIFT = 16;
-static const int INIT_DIST0 = INT_MAX;
-static const int DIST_MAX   = (INT_MAX >> 2);
 #define  CV_FLT_TO_FIX(x,n)  cvRound((x)*(1<<(n)))
 
 static void
-initTopBottom( Mat& temp, int border )
```

Review comment:
As changes relate to temp May only, will it ok to replace on cv::AutoBuffer or just an std::vector?
**File:** modules/imgproc/src/distransform.cpp
**Change Type:** modified
**Context:** PR #24234: Change max distance at distanceTransform

**Code Changes:**
```diff
@@ -45,24 +45,23 @@ namespace cv
 {
 
 static const int DIST_SHIFT = 16;
-static const int INIT_DIST0 = INT_MAX;
-static const int DIST_MAX   = (INT_MAX >> 2);
 #define  CV_FLT_TO_FIX(x,n)  cvRound((x)*(1<<(n)))
 
 static void
-initTopBottom( Mat& temp, int border )
```

Review comment:
Changed to `unsigned int*` cast from `int*`. At least the same performed at `unsigned int* tmp = (unsigned int*)(temp + BORDER*step) + BORDER;`
**File:** modules/videoio/include/opencv2/videoio.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings

**Code Changes:**
```diff
@@ -195,7 +195,7 @@ enum VideoCaptureProperties {
        CAP_PROP_HW_ACCELERATION_USE_OPENCL=52, //!< (**open-only**) If non-zero, create new OpenCL context and bind it to current thread. The OpenCL context created with Video Acceleration context attached it (if not attached yet) for optimized GPU data copy between HW accelerated decoder and cv::UMat.
        CAP_PROP_OPEN_TIMEOUT_MSEC=53, //!< (**open-only**) timeout in milliseconds for opening a video capture (applicable for FFmpeg and GStreamer back-ends only)
        CAP_PROP_READ_TIMEOUT_MSEC=54, //!< (**open-only**) timeout in milliseconds for reading from a video capture (applicable for FFmpeg and GStreamer back-ends only)
-       CAP_PROP_STREAM_OPEN_TIME_USEC =55, //<! (read-only) time in microseconds since Jan 1 1970 when stream was opened. Applicable for FFmpeg backend only. Useful for RTSP and other live streams
+       CAP_PROP_STREAM_OPEN_TIME_USEC =55, //!< (read-only) time in microseconds since Jan 1 1970 when stream was opened. Applicable for FFmpeg backend only. Useful for RTSP and other live streams
        CAP_PROP_VIDEO_TOTAL_CHANNELS = 56, //!< (read-only) Number of video channels
        CAP_PROP_VIDEO_STREAM = 57, //!< (**open-only**) Specify video stream, 0-based index. Use -1 to disable video stream from file or IP cameras. Default value is 0.
        CAP_PROP_AUDIO_STREAM = 58, //!< (**open-only**) Specify stream in multi-language media files, -1 - disable audio processing or microphone. Default value is -1.
```

Review comment:
> `///<` In opencv code base `//!<` format is preferable: ``` $ grep -Rni '///<' ./ | wc -l 207 $ grep -Rni '//!<' ./ | wc -l 1231 ``` (both do the same: https://www.doxygen.nl/manual/docblocks.html#memberdoc )
**File:** modules/videoio/include/opencv2/videoio.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings

**Code Changes:**
```diff
@@ -195,7 +195,7 @@ enum VideoCaptureProperties {
        CAP_PROP_HW_ACCELERATION_USE_OPENCL=52, //!< (**open-only**) If non-zero, create new OpenCL context and bind it to current thread. The OpenCL context created with Video Acceleration context attached it (if not attached yet) for optimized GPU data copy between HW accelerated decoder and cv::UMat.
        CAP_PROP_OPEN_TIMEOUT_MSEC=53, //!< (**open-only**) timeout in milliseconds for opening a video capture (applicable for FFmpeg and GStreamer back-ends only)
        CAP_PROP_READ_TIMEOUT_MSEC=54, //!< (**open-only**) timeout in milliseconds for reading from a video capture (applicable for FFmpeg and GStreamer back-ends only)
-       CAP_PROP_STREAM_OPEN_TIME_USEC =55, //<! (read-only) time in microseconds since Jan 1 1970 when stream was opened. Applicable for FFmpeg backend only. Useful for RTSP and other live streams
+       CAP_PROP_STREAM_OPEN_TIME_USEC =55, //!< (read-only) time in microseconds since Jan 1 1970 when stream was opened. Applicable for FFmpeg backend only. Useful for RTSP and other live streams
        CAP_PROP_VIDEO_TOTAL_CHANNELS = 56, //!< (read-only) Number of video channels
        CAP_PROP_VIDEO_STREAM = 57, //!< (**open-only**) Specify video stream, 0-based index. Use -1 to disable video stream from file or IP cameras. Default value is 0.
        CAP_PROP_AUDIO_STREAM = 58, //!< (**open-only**) Specify stream in multi-language media files, -1 - disable audio processing or microphone. Default value is -1.
```

Review comment:
Ah, indeed, I should have noticed the adjacent ones... Fixed.
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings
**Review Line:** 72

**Code Changes:**
```diff
 Sub: _dst[i] = src1[i] - src2[i]_
-@param src1_data,src1_step first source image data and step
-@param src2_data,src2_step second source image data and step
-@param dst_data,dst_step destination image data and step
-@param width,height dimensions of the images
+@param src1_data first source image data
+@param src1_step first source image step
+@param src2_data second source image data
+@param src2_step second source image step
+@param dst_data destination image data
+@param dst_step destination image step
```

Review comment:
Is this kind of changes necessary? Doxygen supports this syntax and documentation looks fine with it: https://docs.opencv.org/4.x/d8/d6f/group__core__hal__interface__addsub.html
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings
**Review Line:** 72

**Code Changes:**
```diff
 Sub: _dst[i] = src1[i] - src2[i]_
-@param src1_data,src1_step first source image data and step
-@param src2_data,src2_step second source image data and step
-@param dst_data,dst_step destination image data and step
-@param width,height dimensions of the images
+@param src1_data first source image data
+@param src1_step first source image step
+@param src2_data second source image data
+@param src2_step second source image step
+@param dst_data destination image data
+@param dst_step destination image step
```

Review comment:
It does not appear to be valid syntax: https://www.doxygen.nl/manual/commands.html#cmdparam
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings
**Review Line:** 72

**Code Changes:**
```diff
 Sub: _dst[i] = src1[i] - src2[i]_
-@param src1_data,src1_step first source image data and step
-@param src2_data,src2_step second source image data and step
-@param dst_data,dst_step destination image data and step
-@param width,height dimensions of the images
+@param src1_data first source image data
+@param src1_step first source image step
+@param src2_data second source image data
+@param src2_step second source image step
+@param dst_data destination image data
+@param dst_step destination image step
```

Review comment:
Ah, so it does! Strange that it is not in the actual syntax format of: ` \param '['dir']' <parameter-name> { parameter description }` Well, in any case, clang's -Wdocumentation does warn, I would not have changed it otherwise. I'll file a bug with clang, but since -Wdocumentaion found so many other genuine problems, I'd vote for accommodating it, especially since it's already done.
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings
**Review Line:** 72

**Code Changes:**
```diff
 Sub: _dst[i] = src1[i] - src2[i]_
-@param src1_data,src1_step first source image data and step
-@param src2_data,src2_step second source image data and step
-@param dst_data,dst_step destination image data and step
-@param width,height dimensions of the images
+@param src1_data first source image data
+@param src1_step first source image step
+@param src2_data second source image data
+@param src2_step second source image step
+@param dst_data destination image data
+@param dst_step destination image step
```

Review comment:
Ticket exists already: https://github.com/llvm/llvm-project/issues/14707
**File:** modules/objdetect/include/opencv2/objdetect.hpp
**Change Type:** modified
**Context:** PR #23109: Fixes for various mostly trivial warnings

**Code Changes:**
```diff
@@ -730,19 +730,21 @@ class CV_EXPORTS_W QRCodeEncoder {
         ECI_UTF8 = 26
     };
 
-    /** @brief QR code encoder parameters.
-     @param version The optional version of QR code (by default - maximum possible depending on
-                    the length of the string).
-     @param correction_level The optional level of error correction (by default - the lowest).
-     @param mode The optional encoding mode - Numeric, Alphanumeric, Byte, Kanji, ECI or Structured Append.
-     @param structure_number The optional number of QR codes to generate in Structured Append mode.
```

Review comment:
It breaks doxygen documentation.
**File:** modules/core/misc/java/test/CoreTest.java
**Change Type:** modified
**Context:** PR #24342: Fail Java test suite, execution, if one of test failed.
**Review Line:** 967

**Code Changes:**
```diff
-        d = Core.Mahalanobis(line1, line2, covar);
-
-        assertTrue(d > 0.0);
+        // Bug: https://github.com/opencv/opencv/issues/24348
+        // d = Core.Mahalanobis(line1, line2, covar);
+        // assertTrue(d > 0.0);
     }
 
     public void testMax() {
```

Review comment:
It makes sense to disable this check for ARM only.
**File:** modules/dnn/src/net_impl_backend.cpp
**Change Type:** modified
**Context:** PR #23987: OpenVINO backend for INT8 models
**Review Line:** 183

**Code Changes:**
```diff
     }
+#ifdef HAVE_DNN_NGRAPH
+    if (netWasQuantized && backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && INF_ENGINE_VER_MAJOR_LT(INF_ENGINE_RELEASE_2023_0))
+    {
+        CV_LOG_WARNING(NULL, "DNN: OpenVINO 2023.0 and higher is required to supports quantized networks");
+        backendId = DNN_BACKEND_OPENCV;
+    }
+#endif
 
     if (preferableBackend != backendId)
     {
```

Review comment:
incorrect fallback
**File:** modules/dnn/src/int8layers/pooling_layer.cpp
**Change Type:** modified
**Context:** PR #23987: OpenVINO backend for INT8 models
**Review Line:** 130

**Code Changes:**
```diff
                 return type == MAX || type == AVE;
             return false;
         }
+        else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
+        {
+            return true;
+        }
 
         return false;
     }
@@ -271,6 +276,49 @@ class PoolingLayerInt8Impl CV_FINAL : public PoolingLayerInt8
```

Review comment:
OpenVINO is optional dependency. Need some availability check here.
**File:** modules/dnn/test/test_int8_layers.cpp
**Change Type:** modified
**Context:** PR #23987: OpenVINO backend for INT8 models

**Code Changes:**
```diff
@@ -14,6 +14,9 @@ testing::internal::ParamGenerator< tuple<Backend, Target> > dnnBackendsAndTarget
     targets.push_back(make_tuple(DNN_BACKEND_OPENCV, DNN_TARGET_CPU));
 #ifdef HAVE_TIMVX
     targets.push_back(make_tuple(DNN_BACKEND_TIMVX, DNN_TARGET_NPU));
+#endif
+#ifdef HAVE_INF_ENGINE
+    targets.push_back(make_tuple(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_CPU));
 #endif
     return testing::ValuesIn(targets);
 }
```

Review comment:
I propose to add some comments/links why the test case is disabled with OpenVINO backend.
**File:** modules/dnn/test/test_tflite_importer.cpp
**Change Type:** modified
**Context:** PR #23987: OpenVINO backend for INT8 models

**Code Changes:**
```diff
@@ -204,6 +204,10 @@ TEST_P(Test_TFLite, max_unpooling)
 }
 
 TEST_P(Test_TFLite, EfficientDet_int8) {
+    if (target != DNN_TARGET_CPU || (backend != DNN_BACKEND_OPENCV &&
+        backend != DNN_BACKEND_TIMVX && backend != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)) {
+        throw SkipTestException("Only OpenCV, TimVX and OpenVINO targets support INT8 on CPU");
+    }
     Net net = readNet(findDataFile("dnn/tflite/coco_efficientdet_lite0_v1_1.0_quant_2021_09_06.tflite", false));
     net.setPreferableBackend(backend);
```

Review comment:
I propose to add skip reason here.