1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 07:43:03 +04:00

26628 Commits

Author SHA1 Message Date
Abhishek Gola 40ce5b4132 Merge pull request #28637 from abhishek-gola:old_dnn_tickets_cleanup
Added Output Tensor Names support in new DNN engine #28637

closes: https://github.com/opencv/opencv/issues/26201

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-26 15:07:56 +03:00
Rohan Mistry 7e5463b34f Merge pull request #28461 from Ron12777:opt-clean
Optimize calibrateCamera with Schur‑complement LM and parallel Jacobian accumulation #28461

## Summary

- Optimized `calibrateCamera` for faster runtime without changing outputs using Schur‑complement LM, Parallel Jacobian accumulation, alongside other optimizations.
- Reduced time complexity from O(n^3) to O(n)
- Add a perf test that uses a 500-image chessboard dataset for performance testing.

## Performance
<img width="1200" height="800" alt="base_vs_fast_results" src="https://github.com/user-attachments/assets/6dafa19f-f9cb-4f7f-ba40-0940373712e8" />
<img width="1200" height="800" alt="fast_vs_ceres_results" src="https://github.com/user-attachments/assets/7157af27-8a2b-4810-8b53-3cc9972a8493" />
<img width="1200" height="800" alt="base_vs_fast_param_deviation" src="https://github.com/user-attachments/assets/fe4f954c-34f9-4b9a-b1b2-46e4c76ce08c" />


[Testing repo
](https://github.com/Ron12777/OpenCV-benchmarking)
## Testing
- All local tests pass 

## Related

- [opencv_extra PR with test images](https://github.com/opencv/opencv_extra/pull/1312)


See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-26 12:18:50 +03:00
Adrian Kretz a4d9b45168 Benchmark cv::mean instead of cvtest::mean 2026-03-25 21:30:22 +01:00
Abhishek Gola ea485c628c Merge pull request #28646 from abhishek-gola:kernel_values
Fix kernel shape handling in ONNX importer2 #28646

Requires opencv_extra: https://github.com/opencv/opencv_extra/pull/1323
closes: https://github.com/opencv/opencv/issues/28321

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-25 13:12:25 +03:00
vrooomy 185b48cfd6 parent 2d15169ab5
author vrooomy <vj.bro.833@gmail.com> 1773655621 +0530
committer vrooomy <vj.bro.833@gmail.com> 1774357668 +0530

 added SIMD support for 64 bit float and fallback for 64 bit int

removed trailing white-spaces

add SIMD optimization for 32 unsinged int and clean fallback for 64u and 64s

add SIMD support for 32u and fallback for 64u and 64s

changed CalibrateDebevec test threshold to 0.25 (same as ARM) for IPP=NO

relaxed threshold to 0.22

conflict resolved
2026-03-24 18:54:54 +05:30
ffccites 16db340890 Fix resource leaks in Android Utils.java (#28697)
Convert exportResource() and loadResource() to use try-with-resources
to ensure InputStream, FileOutputStream, and ByteArrayOutputStream are
properly closed even when exceptions occur.

Also remove printStackTrace() in exportResource(), as the exception is
already rethrown as CvException with the original exception details.

Signed-off-by: ffccites <99155080+PDGGK@users.noreply.github.com>
2026-03-24 16:41:40 +11:00
ZIHAN DAI 1610602884 Merge pull request #28699 from PDGGK:fix/highgui-system-exit
Replace System.exit(-1) with exceptions in HighGui.java (#28696) #28699

## Summary

Library code should never call System.exit() as it kills the entire JVM. Replaced all 3 instances with appropriate exceptions.

Closes #28696

## Changes

- `imshow()` with empty image: `System.exit(-1)` -> `throw new IllegalArgumentException("Image is empty")`
- `waitKey()` with no windows: `System.exit(-1)` -> `throw new IllegalStateException("No windows created. Call imshow() first")`
- `waitKey()` with null window image: `System.exit(-1)` -> `throw new IllegalStateException("No image set for window: ... Call imshow() first")`
- `InterruptedException` catch: `printStackTrace()` -> `Thread.currentThread().interrupt()`
2026-03-23 16:20:50 +03:00
Yang Guanyuhan 2d15169ab5 Merge pull request #28692 from YangGuanyuhan:fix-lightglue-assertion-fail
dnn: fix dst_dp assertion in broadcast for size-1 dims causing crash in lightglue.onnx model #28692

The original assertion CV_Assert(dst_dp == 1) does not handle valid cases where the innermost dimension size is 1 like [10, 5, 1], resulting in dst_dp == 0.

This occurs during broadcasting in LightGlue ONNX model and leads to assertion failure.

Allow dst_dp == 0 for size-1 dimensions to handle this edge case correctly.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-23 11:27:37 +03:00
Weixie Cui 1612fd9ac3 dnn: fix BatchNorm bias blob index in validation
When hasBias is true, CV_Assert must reference blobs[biasBlobIndex], not blobs[weightsBlobIndex], for the bias tensor.
2026-03-22 02:52:52 +08:00
Abhishek Gola ff2e6358fd added AVXX VNNI support 2026-03-20 13:20:31 +05:30
Alexander Smorkalov f6aceee13b Merge pull request #28655 from usernotfound-101:cvmixchannels-warning-fix
Add static integer casting for cvMixChannels, safer
2026-03-20 10:25:38 +03:00
Varun Jaiswal df7d437b86 Merge pull request #28663 from varun-jaiswal17:added-inRange-64double-SIMD
Added SIMD support for 64 bit float and fallback for 64 bit int#28663

Merged with : https://github.com/opencv/ci-gha-workflow/pull/299

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-20 08:42:56 +03:00
Alexander Smorkalov b5a7e0c662 Merge branch 4.x 2026-03-19 11:29:57 +03:00
Abhishek Gola 2dec80044b moved AVXVNNI function to core 2026-03-17 18:58:03 +05:30
Pavel Guzenfeld 3779f630bc Clean up stale typing stubs during incremental builds
When a module is disabled in an incremental build (e.g. switching from
-DBUILD_opencv_gapi=ON to OFF), its typing stub directory persists from
the previous build.  The stubs generator only creates directories for
enabled modules but never removes old ones, and the copy step merges
rather than replaces, so stale .pyi files propagate to both the loader
directory and the install prefix.

This causes type-checkers (mypy, pyright) to report errors for stubs
that reference symbols from modules that are no longer available.

Fix both propagation paths:

- generation.py: remove all subdirectories under the stubs output root
  before regenerating, so only currently enabled module stubs exist in
  the build directory.  Top-level files (py.typed) are preserved.

- copy_typings_stubs_on_success.py: remove stale .pyi files and
  py.typed markers from the loader directory before copying fresh stubs,
  so leftover stubs from a previous copy are cleaned up.  Runtime .py
  files are not affected.
2026-03-16 23:41:37 +02:00
pratham-mcw 2dd3d1371a Merge pull request #28636 from pratham-mcw:imgproc_distance_transform_opt
imgproc: add SIMD support for distance transform function #28636

- This PR adds OpenCV SIMD intrinsics-based optimizations to the distance transform functions for improved performance.
- The optimized implementation uses vectorized operations to accelerate the forward and backward passes of distance computation.
- In x64 architecture, distance transform function benefit from IPP-based optimized implementations. However, on ARM64 platforms, the execution falls back to scalar implementation, which results in lower performance.
- After introducing these changes, the distance transform functions showed noticeable performance improvements on Windows-ARM64.
<img width="800" height="706" alt="image" src="https://github.com/user-attachments/assets/9786606a-9d92-489d-a5ea-d2e57453ef02" />

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
2026-03-16 13:51:03 +03:00
Pavel Guzenfeld 95ab7149fe Fix Python bindings when optional modules like gapi are disabled
Fix two issues that cause `import cv2` to fail when building with
-DBUILD_opencv_gapi=OFF:

1. In `has_all_required_modules()`, the function parameter `type_node`
   was ignored in favor of the enclosing scope's loop variable `node`.
   This works by accident when called as `has_all_required_modules(node)`
   but is incorrect — the parameter should be used directly.

2. In `__load_extra_py_code_for_module()`, only `ImportError` was
   caught. When a stale gapi submodule directory exists from a previous
   build, gapi/__init__.py raises `AttributeError` (not `ImportError`)
   because it tries to access C++ bindings that don't exist. Now catches
   both exception types for defense-in-depth.

Refs: #26098
2026-03-15 23:21:42 +02:00
usernotfound-101 3470f5b35b Add static integer casting to get rid of the warning, safer 2026-03-13 22:25:08 +05:30
Abhishek Gola f059d3b517 Merge pull request #28634 from abhishek-gola:flops_addition
Added getFLOPS support in new DNN engine #28634

closes: https://github.com/opencv/opencv/issues/26199

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-13 18:27:14 +03:00
Vadim Pisarevsky 1b483ffea6 Merge pull request #28585 from vpisarev:dnn_block_layout_v5
Block layout-based convolution in DNN #28585

merge together with https://github.com/opencv/opencv_extra/pull/1321

Some core parts of the new engine in DNN module have been revised substantially:

1. all tests seem to pass, except for `Test_Graph_Simplifier.ResizeSubgraph`, which has been disabled because it does not take the newly added `TransformLayoutLayer` into account. The test should be reworked perhaps.
1. convolution and related operations (maxpool/avgpool) now use so-called block layout (`DATA_LAYOUT_BLOCK`), where `NxCxHxW` tensors are represented  as `NxC1xHxWxC0`, where `C1=(C + C0-1)/C0` and `C0` is a power-of-two (usually 4, 8, 16 or 32).
1. graph is now pre-processed and `TransformLayoutLayer` is inserted to convert data from NCHW or NHWC layout to the block layout or vice versa. The transformations are done in a lazy way only when they are really needed. For example, in the whole Resnet only 2 transformations are performed.
1. transformer-based models and other models that do not use convolutions will run as usual, without going to block layout.
1. there is yet another graph preprocessing stage added that embeds constant weights/scale and bias into convolution and batch norm layers.
1. 'batchnorm', 'activation' and 'adding a residual' are now fused with convolution, just like in the old engine. That brings some noticeable acceleration.
1. optimized convolution kernels have been added.
     * depthwise convolution, as well as maxpool and avgpool support C0=4, 8, 16 etc. _as long as_  C0 is divisible by the number of fp32 lanes in a SIMD register of the target platform (e.g. on ARM with NEON there must be `C0 % 4 == 0`, on x64 with AVX2 `C0 % 8 == 0`).
     * non-depthwise convolution only supports C0=8 for now. C0=8 seems to be a sweetspot for ARM with NEON, x64 with AVX2 or RISC-V with RVV (with 128- or 256-bit registers). For some platforms with dedicated matrix accelerators C0=16 or even C0=32 might be more efficient, but we could add the respective kernels later.
     * only fp32 kernels have been added. fp16/bf16 kernels might be added a little later.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
- [x] Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-03-13 17:09:27 +03:00
Madan mohan Manokar 00833f98d0 Merge pull request #28632 from amd:fast_scharr_deriv
video: Optimized ScharrDeriv#28632

- Move to CV_SIMD_SCALABLE
- avx2 & avx512 dispatch added for ScharrDeriv

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-13 13:04:46 +03:00
Alexander Smorkalov 8f9c7c0f72 Merge pull request #28643 from Prasadayus:fix-gather-cast-axis-4x
DNN/ONNX: Preserve axis attribute in GatherCastSubgraph fusion
2026-03-13 11:46:19 +03:00
Madan mohan Manokar 18c7c9bcb9 Merge pull request #28614 from amd:fast_flipHoriz
Optimized flip Horizontal #28614

- Refactor flipHoriz implementation.
- Optimizations for horizontal image flipping added.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-13 11:11:20 +03:00
nklskyoy 5c8d3b60f4 Merge pull request #28524 from nklskyoy:attn-kv-cache
CPU Kernels for fp32 KV Cache #28524

The kernels are:
- pagedAttnQKGemmKernel
- pagedAttnAVGemmKernel

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [ ] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-03-13 10:23:30 +03:00
Matt Van Horn 8e1fa1bbdc Merge pull request #28620 from mvanhorn:osc/28619-fix-yaml-parsekey-empty-key-oob
core: fix heap-buffer-overflow in YAML parseKey for empty keys #28620

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake

### Description

Fixes https://github.com/opencv/opencv/issues/28619

Moves the "empty key" check before the backward do-while scan in `YAMLParser::parseKey()`.

**Problem:** When parsing a YAML mapping with an empty key (e.g. `: 10` at column 0), `endptr == ptr` after the forward scan finds `:`. The do-while loop `do c = *--endptr; while(c == ' ')` always executes at least once, so it decrements `endptr` to `ptr-1` and reads one byte before the heap allocation (ASan: heap-buffer-overflow READ of size 1).

**Fix:** Check `endptr == ptr` before entering the backward loop. If the key is empty, raise `CV_PARSE_ERROR_CPP("An empty key")` immediately without the OOB read.

This contribution was developed with AI assistance (Claude Code).
2026-03-12 10:37:24 +03:00
Alexander Smorkalov 1a3e1e05b7 Merge pull request #28581 from JoyBoy900908:fix-ubsan-countnonzero
core: fix UBSan function pointer type mismatch in countNonZero
2026-03-12 10:16:17 +03:00
Prasad Ayush Kumar fb6f5cc282 DNN/ONNX: Preserve axis attribute in GatherCastSubgraph fusion 2026-03-11 13:12:09 +05:30
Matt Van Horn c3457f99f3 Merge pull request #28621 from mvanhorn:osc/28528-fix-houghcircles-return-type
imgproc: fix HoughCircles Python return type to allow None #28621

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake

### Description

Fixes https://github.com/opencv/opencv/issues/28528

`HoughCircles` returns `None` when no circles are found, but the auto-generated Python type stub declares the return type as `MatLike` without `None`. This causes type checkers (mypy/pyright) to miss potential `None` dereferences.

**Fix:** Add `HoughCircles` to `NODES_TO_REFINE` in `api_refinement.py` using the existing `make_optional_none_return` helper - the same pattern already used for `imread` and `imdecode`.

This contribution was developed with AI assistance (Claude Code).
2026-03-11 08:55:36 +03:00
gideok Kim 4ebaf2dbb4 imgproc: fix fitEllipseDirect/AMS determinant threshold for near-circular data
fitEllipseDirect: replace det(M) threshold with eigenvector quality check
- Add Ts ≈ 0 guard to avoid division by zero in Schur complement
- Move eigenNonSymmetric inside perturbation loop
- Validate eigenvector with 4ac-b² > 1e-6*||v||² to filter garbage from
  complex eigenvalues

fitEllipseAMS: scale threshold by 1/n^5 to match det(M) magnitude

Add Imgproc_FitEllipseDirect_NearCircular regression test
2026-03-10 23:18:02 +09:00
Prasad Ayush Kumar e188ffd190 Merge pull request #28633 from Prasadayus:fix/gather-cast-axis
Fix gather cast axis #28633

Closes: https://github.com/opencv/opencv/issues/23231

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-10 11:25:56 +03:00
JoyBoy900908 7286212ce6 core: use void* in countNonZero signature per team review 2026-03-09 14:20:43 +08:00
Souriya Trinh 7f164b5653 Add a white background for images which have a transparent background in the calib3d module.
See:
  - https://github.com/opencv/opencv/pull/28450
  - https://github.com/opencv/opencv/pull/28426
2026-03-05 11:06:14 +01:00
Anshu fe160f3eed Merge pull request #28548 from 0AnshuAditya0:fix-minEnclosingCircle-welzl-28546
imgproc: fix minEnclosingCircle O(n^3) worst case by adding Welzl shuffle #28548

Welzl's algorithm requires random permutation of input points to
achieve expected O(n) time. Without shuffling, sorted inputs such
as those produced by findContours() trigger O(n^3) worst case.

Fix: copy input to std::vector<PT> and apply cv::randShuffle()
before processing. Uses OpenCV's RNG so cv::setRNGSeed() ensures
reproducible behavior.

Original benchmark (5088 contour points, Release, AVX2):
findContours output: 3.93 ms → 0.033 ms (119x speedup)
Random points: 0.051 ms → 0.049 ms (no regression)

Perf test results (this PR, Release, AVX2):
| Input | N | Time |
|-------|---|------|
| Sequential circle points | 10000 | 0.03 ms |
| Sequential circle points | 5000 | 0.01 ms |
| Random points (CV_32F) | 100000 | 1.87 ms |
| Random points (CV_32S) | 100000 | 2.81 ms |

Fixes #28546

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-03-04 15:16:07 +03:00
Jonas Perolini 5e91b461bc Merge pull request #28289 from JonasPerolini:pr-aruco-identification
Identify ArUco markers based on threshold to reduce false positives #28289

**Goal:** parametrize the current marker identification process (pixel-based majority count) to reduce the number of false positives while maintaining high recall. Useful in high risk scenarios in which false positives are not acceptable. 

**Context:** This PR builds on top of https://github.com/opencv/opencv/pull/23190 in which we've introduced a pixel-based confidence in the marker detection.

**Solution:** Include a new parameter: `validBitIdThreshold` used to identify markers based on the pixel count of each cell. Set the parameter default either to 50% which is equivalent to the current majority count implementation or to 49% which already singnificantly reduces the number of false positives (see details below). 

**Test coverage:** 
- Unit tests: `CV_ArucoDetectionThreshold`, `CV_InvertedArucoDetectionThreshold`
- The impact of `validBitIdThreshold` on false positives was also tested using the benchmark dataset: `MIRFLICKR-25k` https://www.kaggle.com/datasets/skfrost19/mirflickr25k which contains random images without any markers. Every marker detection is a false positive. 

Example of images in the dataset:

![im2048](https://github.com/user-attachments/assets/3e38796b-67ce-44be-a91d-2fd268414515)

![im17627](https://github.com/user-attachments/assets/37253b9f-829d-4bac-b9fc-c844d16f546e)

**Results:** A threshold of 49% already allows to significantly reduce the number of false positives for the dict `DICT_4X4_1000`: 
- `5942` false positives for `validBitIdThreshold = 0.5`
- `629` false positives for `validBitIdThreshold = 0.49` and `0.46` 
   - number of false positives divided by `9.5` when compared to `validBitIdThreshold = 0.5`
- `139` false positives for `validBitIdThreshold = 0.43` and `0.4` 
   - number of false positives divided by `42` when compared to `validBitIdThreshold = 0.5`

Dicts with a higher number of cells are not as impacted since it's much harder to obtain false positives. However, the less cells in a marker the further away it can be reliably detected, so the dict `DICT_4X4_1000` is commonly used.

<img width="1280" height="800" alt="false_positive_image_rate" src="https://github.com/user-attachments/assets/1a0ee16a-221d-443e-835b-022ed6dea6b0" />

In the image attached, the values of `validBitIdThreshold` tested are:  `0.10f, 0.20f, 0.30f, 0.40f, 0.43f, 0.46f, 0.49f, 0.50f, 0.53f, 0.56f, 0.60f, 0.70f, 0.80f, 0.90f`

Summary of the results: [summary.csv](https://github.com/user-attachments/files/24315662/summary.csv)

Note that we can also analyse the number of false positives per marker `id`. For example, here's the histogram for the dict `DICT_4X4_1000`. (The CSV attached contains all the results)

<img width="1440" height="640" alt="false_positive_ids_DICT_4X4_1000_thr0 50" src="https://github.com/user-attachments/assets/af4f3ff8-9b8f-4682-9d51-a090c2610d8c" />

For example, the marker id 17 is detected 252 times with  `validBitIdThreshold = 0.5` and only 34 times with `validBitIdThreshold = 0.49`. Looking at marker 17 (see below), we understand that this simple pattern randomly occurs in images.

<img width="447" height="441" alt="Marker17" src="https://github.com/user-attachments/assets/f5d09227-b39b-4598-94f9-b529f8300703" />

Results for every dict and every `validBitIdThreshold` [per_id.csv](https://github.com/user-attachments/files/24315667/per_id.csv)

**Missing coverage:** there is no labeled dataset with images containing markers to analyse the impact of on the recall  (i.e. look at the true positive rate). For my specific use case (drones) any threshold above `0.4` allows to maintain a high recall in all conditions.

### Pull Request Readiness Checklist


- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [ ] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-03-04 08:44:28 +03:00
Murat Raimbekov 91c78f5064 Merge pull request #28309 from raimbekovm:fix-typos-batch6
docs: fix typos in documentation and code comments #28309

## Summary

This PR fixes 10 spelling errors in documentation and code comments across 7 files.

## Changes
- `suppport` → `support` (2 occurrences in test_video_io.cpp)
- `compability` → `compatibility` (2 occurrences in face.hpp)
- `successfull` → `successful` (1 occurrence in cv2.cpp)
- `accomodate` → `accommodate` (2 occurrences in calib3d.hpp and test_camera.cpp)
- `minimun` → `minimum` (1 occurrence in aruco_detector.hpp)
- `maximun` → `maximum` (1 occurrence in aruco_detector.hpp)
- `orignal` → `original` (1 occurrence in aruco_detector.cpp)

## Test plan
- [x] No API changes
- [x] Documentation-only changes
- [x] Code compiles without errors
2026-03-03 14:29:47 +03:00
ADITYA MISHRA 1099135b88 Merge pull request #28592 from AdityaMishra3000:fix-openvino-2026-constness
DNN: Fix OpenVINO 2026 build failure due to ov::Tensor::data() const change #28592

Fixes: https://github.com/opencv/opencv/issues/28586

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake

### PR Description

OpenVINO 2026 changed ov::Tensor::data() to return `const void*`
instead of `void*`. This causes a build error in
modules/dnn/src/op_inf_engine.cpp when constructing a cv::Mat
wrapper over Tensor memory.

Tensor memory for input/output blobs remains mutable, but the API
now enforces const-correct access. This patch casts away const with
an explicit comment to preserve existing zero-copy semantics and
restore compatibility with OpenVINO 2026.
Preserves existing zero-copy semantics of the OpenVINO backend without altering runtime behavior.

Tested by building OpenCV 4.x against OpenVINO 2026.0.0 on Ubuntu 24.04.
2026-03-03 13:56:38 +03:00
Alexander Smorkalov c1c48dd17f Merge pull request #28591 from vrabaud:asan
Make sure j < maxRow in smooth functions
2026-03-03 08:56:36 +03:00
Alexander Smorkalov 6926b4218e Merge pull request #28590 from GideokKim:fix/fitellipse-redundant-fabs
imgproc: remove redundant fabs() in fitEllipseDirect
2026-03-03 08:52:41 +03:00
Alexander Smorkalov f46498b3c7 Merge pull request #28587 from intel-staging:staging/ekharkov/arithm
Restored IPP in cv::compare
2026-03-03 08:49:20 +03:00
Vincent Rabaud 517bc1c777 Make sure j < maxRow in smooth functions
Otherwise some values out of memory can be read.
This was found with ASAN.
2026-03-02 18:23:31 +01:00
gideok Kim 6676c04d7c imgproc: remove redundant fabs() in fitEllipseDirect
In fitEllipseDirect, `double det = fabs(cv::determinant(M))` applies
fabs() unnecessarily since the next line `if (fabs(det) > 1.0e-10)`
already takes the absolute value. Remove the outer fabs() to avoid
the redundant operation.
2026-03-02 22:23:54 +09:00
ekharkov 30aa3c9266 Revert "Disable IPP with AVX512 in cv::compare because of performance regression" 2026-03-02 01:47:14 -08:00
Muhammad Awais 69bdcc9386 Merge pull request #28536 from Sikandar1310291:fix/inrange-typing-28534
Fix inRange type signature to accept Scalar values #28536

Fixes #28534

The Python type signature for cv2.inRange was too restrictive, requiring MatLike for lowerb and upperb parameters. However, the C++ implementation accepts InputArray which includes Scalar values (tuples, floats, etc.).

This caused type checkers to incorrectly flag valid code from official tutorials as type errors.

Added make_matlike_or_scalar_arg() refinement function to create union types MatLike | Scalar for affected parameters, matching the C++ InputArray behavior.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-03-02 09:43:56 +03:00
Alexander Smorkalov 5ee977b839 Merge pull request #28576 from AndrewO-MMLLC:fix/28571-cvMoveWindow-macOS-dock-offset
highgui(cocoa): fix moveWindow Y conversion when Dock is visible
2026-03-01 15:28:56 +03:00
Abhishek Gola 31cab2a055 Merge pull request #28574 from abhishek-gola:reduce_layer_empty_set
* added empty set support

* accept unnamed dynamic dims

* Fix for LSTM test failure

* removed converToND

* openvino failing test fix

* ARM CI issue fix

* ARM issue fix
2026-03-01 15:19:44 +03:00
Alexander Smorkalov 7da3af2c41 Dropped KAZE license files as they moved to contrib. 2026-03-01 08:28:49 +03:00
JoyBoy900908 a9e13a5e8c core: fix UBSan function pointer type mismatch in countNonZero 2026-02-28 20:50:54 +08:00
Abhishek Gola 95c66292b5 Merge pull request #28444 from abhishek-gola:added_ORT_wrapper
Added ONNX Runtime as an optional wrapper #28444

This PR adds ONNXRuntime (ORT) as an _optional_ wrapper, which can be enabled by adding **WITH_ONNXRUNTIME** flag in CMake command.

Using ORT wrapper the inference time for _resnet50.onnx model_ has come to _**~7ms**_ from _**~14ms**_.
Also, we are able to run models like `ssd_mobilenet_v1.onnx`.
### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-02-27 15:47:12 +03:00
Alexander Smorkalov 7644636904 Merge pull request #28579 from asmorkalov:as/mul_overflow_fix
Fixed cv::mul overflow for U16 type.
2026-02-27 10:55:13 +03:00
Alexander Smorkalov d506e78655 Merge pull request #28578 from asmorkalov:as/video_url_refresh
Test video url refresh.
2026-02-27 10:23:19 +03:00