1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-29 15:23:05 +04:00
Commit Graph

25799 Commits

Author SHA1 Message Date
Alex 46ee0f7954 Merge pull request #28844 from 0lekW:videoio-image-seq-start
Add CAP_PROP_IMAGE_SEQ_START #28844

Resolves https://github.com/opencv/opencv/issues/28843

New CAP_PROP_IMAGE_SEQ_START as an open only property for setting the first frame index when a VideoCap is opening with pattern, squashes test_images TODO.

`CAP_FFMPEG`: forwarded to the image2 demuxers "start_number" option.

`CAP_IMAGES`: Now a WithParams variant so the value reaches open() before probe runs, replaces 0 or 1 auto probe for sequence start.

Property is opt in so default behavior is not affected.  
Please note that G_STREAMER is not considered here as I think its out of scope, it already has a "start-index" property and its backend is driven by the pipeline strings rather then these printf patterns.

If an alternative solution is preferred that will not involve a new property or promoting CAP_IMAGES to a "WithParams" variant I don't mind implementing.  

### 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.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-04-28 10:18:50 +03:00
Vincent Rabaud 597c360b9d Merge pull request #28825 from vrabaud:cxx
Bump some calib3d files to C++ #28825

This is just copy/pasting files from 5.x (first commit) and applying some light patch for compilation (second commit).

### 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
- [ ] 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-04-28 10:16:42 +03:00
Mulham Fetna d60b0c70b4 highgui(qt): preserve UTF-8 window names in fallback paths
Avoid lossy Latin-1 conversions when creating/looking up Qt HighGUI windows and convert C-string entry points to UTF-8 explicitly. This fixes non-ASCII title handling paths that could lead to mismatched window lookup and silent display failures.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-25 12:32:46 +03:00
Jeevan Mohan Pawar 273e52ce8d Merge pull request #28818 from jeevan6996:fix-charuco-detectdiamonds-clear-stale-output
objdetect: clear stale outputs in CharucoDetector::detectDiamonds #28818

## Summary
- clear `diamondCorners`/`diamondIds` outputs at the beginning of `CharucoDetector::detectDiamonds`
- prevent stale detections from previous calls when the current call has fewer than 4 markers or finds no diamonds
- add a regression test that pre-fills outputs, calls `detectDiamonds` with 3 markers, and verifies outputs are empty

Fixes #28783.

## Testing
- built `opencv_test_objdetect` locally
- ran `opencv_test_objdetect --gtest_filter=Charuco.detectDiamondsClearsOutputsWithLessThanFourMarkers`
- result: PASS
2026-04-22 15:42:37 +03:00
Alexander Smorkalov 1e61a2283d Merge pull request #28628 from GideokKim:fix/fitellipse-det-threshold
imgproc: fix fitEllipseDirect/AMS determinant threshold for near-circular data
2026-04-22 10:47:13 +03:00
kjg0724 5d88781f74 Merge pull request #28782 from kjg0724:reduce-simd-optimization
core: add platform-specific SIMD for cv::reduce REDUCE_SUM

### Pull Request

Rewrite `cv::reduce` SIMD optimization using platform-specific instructions as discussed in #28763.

#### Changes

**Col reduce (dim=1) — horizontal sum per row:**
- ARM DOTPROD: `vdotq_u32()` — single-instruction byte sum, no intermediate flush needed
- ARM AArch64 fallback: `vpaddlq` chain (u8→u16→u32)
- Intel AVX2: `_mm256_sad_epu8()` — 32 bytes → 4×u64 partial sums per cycle
- Intel SSSE3: `_mm_shuffle_epi8` + `_mm_sad_epu8` for cn=4 channel separation
- Intel SSE2: `_mm_sad_epu8` for cn=1
- cn=4: hardware deinterleave (`vld4q_u8` on ARM, shuffle+SAD on Intel)

**Row reduce (dim=0) — vertical accumulation across rows:**
- u16 intermediate accumulator with 256-row flush (halves memory bandwidth vs direct u32)
- ARM AArch64: `vaddw_u8` widening add (single instruction vs expand+add)
- Intel: unpack + add with u16 buffer

**Coverage:** All REDUCE_SUM type combinations — 8U→32S, 8U→32F, 16U→32F, 16S→32F, 32F→32F, 32F→64F, 64F→64F. Non-8U types use universal intrinsics where platform-specific gain is minimal (widening is single-stage, FP has limited alternatives). `REDUCE_AVG` benefits automatically (uses SUM internally).

**Dispatch:** `CV_CPU_DISPATCH` with SSE2/AVX2/NEON_DOTPROD/LASX. Fallback hierarchy: DOTPROD → AArch64 NEON → Universal Intrinsics → scalar.

#### Benchmark (Apple M3 Pro, MacBook Pro 16-inch 2023)

| Path | Type | Speedup vs scalar |
|------|------|-------------------|
| Col reduce (dim=1) | 8UC1 | **3.0–4.5x** |
| Col reduce (dim=1) | 8UC4 | **2.7–5.0x** |
| Col reduce (dim=1) | 32FC1 | 1.7–2.3x |
| Row reduce (dim=0) | 8UC1 | 1.1–1.5x |

Row reduce gains are modest due to memory-bandwidth bound (as expected for vertical accumulation). No regressions on non-target paths (MAX, MIN, SUM2).

#### Testing

- `opencv_test_core --gtest_filter="*Reduce*:*reduce*"` — 483 tests PASSED
- Edge cases: non-aligned dimensions (127×61), cn=2/3 scalar fallback, REDUCE_SUM2 unmodified

#### Files changed

- `modules/core/src/reduce.simd.hpp` — new, platform-dispatched SIMD implementation
- `modules/core/src/reduce.dispatch.cpp` — new, CV_CPU_DISPATCH wrapper
- `modules/core/CMakeLists.txt` — add `NEON_DOTPROD` to dispatch list
- `modules/core/src/matrix_operations.cpp` — wire dispatch functions into ReduceC/R_Invoker
2026-04-21 12:24:38 +03:00
4ekmah 9f101a126f Merge pull request #28802 from 4ekmah:pyr_ecc
Multiscale ECC #28802

OpenCV Extra: https://github.com/opencv/opencv_extra/pull/1338

### 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-04-20 17:22:19 +03:00
Alexander Smorkalov f327f0669e Merge pull request #28813 from Lurie97:fix_flip_inplace
core/ocl: fix incorrect results for in-place flip on strict OpenCL implementations
2026-04-20 14:59:37 +03:00
jiajia Qian ba879cd60f core/ocl: fix incorrect results for in-place flip on strict OpenCL implementations
Previously, OpenCL in-place flip kernels (rows/cols/both) could produce
incorrect results compared to the CPU implementation on strict OpenCL
drivers such as Mesa. The kernels relied on implicit load–load–store–store
(LLSS) ordering when src and dst alias, which is not guaranteed by the
OpenCL memory model and may be reordered.

Some vendor drivers happened to preserve the expected ordering, masking
the issue, but Mesa correctly exposes the undefined behavior.

This change introduces dedicated in-place flip kernels that:
- Explicitly detect in-place execution (src == dst)
- Stage data through local memory tiles
- Enforce correct ordering with work-group barriers
- Avoid global memory read/write aliasing hazards

The non in-place path is unchanged.

With this fix, OpenCL in-place flip produces correct and consistent results
across drivers, matches CPU behavior, and complies with the OpenCL memory
model.

Signed-off-by: jiajia Qian <jiajia.qian@nxp.com>
2026-04-21 08:54:52 +08:00
Alex 30178be800 Merge pull request #28833 from 0lekW:avfoundation-fractional-fps-seek-fix
Avfoundation fractional fps seek fix #28833

Accompanied by PR on [opencv_extra](https://github.com/opencv/opencv_extra/pull/1345)

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

AVFoundation backend seeking slowly drifts for any video which has a non-integer frame rate.   
Narrowing of a float `mAssetTrack.nominalFrameRate` to int32_t means fractional rates are treated as integer when seeking by frame number. 

Solution implemented in this branch is to use the tracks native rational frame duration when seeking (and available).
I've also included an AVF only test case which uses a new test file in opencv_extra. This test just compares the video caps expected ms vs actual for a known rate file (23.976). 

Could consider extending this test to more then just AVF, as from what I can see there are no fractional rate tests / files.

### 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-04-20 14:58:58 +03:00
Alexander Smorkalov 590b99f478 Merge pull request #28814 from vrabaud:intrin
Rewrite getBitsFromByteList to avoid harmless buffer overflow
2026-04-20 12:02:13 +03:00
Alexander Smorkalov 4e70ee722f Merge pull request #28828 from manand881:chore/faster-ocl-bfmatcher-crosscheck
OpenCL BFMatcher optimization for crosscheck case
2026-04-20 10:57:18 +03:00
Kumataro 1ae5a8586b Merge pull request #28615 from Kumataro:fix28606
imgcodecs(png): support cICP metadata for imreadWithMetadata() #28615

Close https://github.com/opencv/opencv/issues/28606
Related https://github.com/opencv/opencv/pull/27741 (support for imwriteWithMetadata)

### 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.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-04-19 20:11:33 +03:00
Anand Mahesh ab0def4854 chore/faster-ocl-bfmatcher-crosscheck
The existing 2-pass cross-check implementation requires both forward and
reverse distance computations on GPU, followed by CPU-side filtering.
This adds a single-pass kernel using int64 atomics to eliminate the
reverse pass. The BruteForceMatch_CrossCheckMatch kernel performs forward
matching and tracks best train->query mappings in one GPU pass, reducing
memory transfers. Falls back to 2-pass approach on devices without
cl_khr_int64_base_atomics extension.

Tested on NVIDIA RTX 5060 Ti: 1.65x-1.97x faster than 2-pass GPU,
3.49x-7.33x faster than CPU at 640x480 to 1920x1080 resolutions.
2026-04-19 22:08:29 +05:30
Alexander Smorkalov 6aba6fda2d Disable FFmpeg tests that need FFmpeg wrapper rebuild on Windows. 2026-04-17 10:56:46 +03:00
vrooomy 3215d7e6ea fix Flatten axis=rank bug 2026-04-16 18:09:36 +05:30
Vincent Rabaud ae6198e000 Rewrite getBitsFromByteList to avoid harmless buffer overflow
At the end, currentByte = byteList.ptr()[base + currentByteIdx];
could be out of bound though never used.
2026-04-15 16:14:25 +02:00
Alexander Smorkalov 934c0716d2 Merge pull request #28735 from manand881:feature/ocl-bfmatcher-crosscheck
features2d: add OpenCL acceleration for BFMatcher cross-check
2026-04-15 08:48:14 +03:00
Alexander Smorkalov bc0dff8c3e Merge pull request #28757 from AlrIsmail:fix-issue-22056
photo: remove redundant code in illuminationChange
2026-04-14 17:26:00 +03:00
Pierre Chatelier 723670c33d Merge pull request #28785 from chacha21:tiff_32F_compression
Allow TIFF compression schemes for 32F#28785

Related to [https://github.com/opencv/opencv/issues/28775](https://github.com/opencv/opencv/issues/28775)

Previously, only 32FC3+SGILOG could be specified for TIFF encoding. But when floats use quantization, compression schemes can be efficient even on 32F data. This PR will allow them.

### 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.
- [X] The feature is well documented and sample code can be built with the project CMake

I just don't know what kind of accuracy/performance tests should be added.
2026-04-10 15:16:29 +03:00
Alexander Smorkalov 1acf28507f Merge pull request #28786 from asmorkalov:as/calib_log_4.x
Added missing includes for CV_LOG_xxx.
2026-04-09 19:14:38 +03:00
Andrew Yooeun Chun 570e32cc9b videoio: fix FFmpeg VideoCapture rejecting CAP_PROP_FORMAT=CV_8UC3 2026-04-09 22:06:15 +09:00
Alexander Smorkalov 3282bfc149 Added missing includes for CV_LOG_xxx. 2026-04-09 14:54:48 +03:00
Ismail 758e8620ac photo: remove redundant code in illuminationChange
Fixes redundant code in Cloning::illuminationChange() which performed
unnecessary copyTo operations. This satisfies Issue #22056.

Testing: No functional changes made; logic identical to before.

Resolves #22056
2026-04-04 00:15:08 +02:00
Alexander Smorkalov 9eb887d02d Merge pull request #28751 from asmorkalov:as/read_write_video_alpha
Added alpha channel support to VideoWriter and VideoCapture.
2026-04-03 16:00:08 +03:00
Lurie97 a3e129aad8 Merge pull request #28686 from Lurie97:fix_inplace
core(opencl): fix inplace transpose race by enforcing LLSS ordering via local barrier #28686

The former inplace transpose implementation allowed a reordering of global-memory operations across work-items. Specifically, the intended LLSS (Load–Load–Store–Store) access pattern could be reordered by the GPU into LSLS (Load–Store–Load–Store), causing partially written tiles to be observed by other work-items and producing incorrect output.

This patch introduces a tiled LDS-based algorithm and adds an explicit:

    barrier(CLK_LOCAL_MEM_FENCE);

between the load and store phases.

### 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-04-03 15:50:11 +03:00
Alexander Smorkalov 18eb0a1c12 Merge pull request #28754 from vrabaud:intrin
Fix case for intrin.h
2026-04-03 15:24:52 +03:00
LHOOL1109 9dba8a7df0 Merge pull request #28747 from LHOOL1109:fix/python-zero-channel-crash
python: fix segfault on 0-channel numpy array input #28747

### 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
- [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
      N/A: a Python unit test is added in `modules/python/test/test_mat.py`. No external test data required.
- [x] The feature is well documented and sample code can be built with the project CMake
      N/A: this is a bug fix, not a new feature. No documentation update needed.

### Problem

Passing a numpy array with shape `(H, W, 0)` (0 channels) to any OpenCV function that accepts a `Mat` argument (e.g. `cv2.resize`, `cv2.warpAffine`, `cv2.blur`) causes a **segfault**.

**Reproducer:**
```python
import cv2
import numpy as np

arr = np.zeros((100, 100, 0), np.uint8)
cv2.resize(arr, (200, 200))  # segfault
```

### Root Cause

In `modules/python/src2/cv2_convert.cpp`, the numpy→Mat conversion checks channel validity only against `CV_CN_MAX` (upper bound):

```cpp
if (channels > CV_CN_MAX)   // channels=0 passes this check
```

With `channels=0`, `CV_MAKETYPE(0, 0)` produces `type=-8`, which corrupts the Mat's internal type field and causes undefined behavior downstream.

### Fix

Extend the check to also reject `channels < 1`:

```cpp
if (channels < 1 || channels > CV_CN_MAX)
```

**After fix:**
```
cv2.error: src unable to wrap channels, invalid count (0, must be in [1, 512])
```

### Notes

- This affects all functions that accept a `Mat` input, not just `cv2.resize`
- The same bug exists in the `5.x` branch
- A 0-channel array has no valid OpenCV Mat representation; rejecting it with a clear error is the correct behavior and poses no backward-compatibility risk (the previous behavior was a crash)
2026-04-03 14:26:18 +03:00
Alexander Smorkalov 87bdcd4f14 Added alpha channel support to VideoWriter and VideoCapture. 2026-04-03 12:36:45 +03:00
Vincent Rabaud 6b152941dc Fix case for intrin.h
Compilation fails on platforms that are case-dependent, apparently
some windows arm 64. The source of truth is lower case:
https://github.com/yuikns/intrin/blob/master/intrin.h
2026-04-02 19:01:37 +02:00
Vincent Rabaud 12c90ff05b Fix invalid PAM decoding
This fixes https://issues.oss-fuzz.com/issues/497290557
2026-04-02 16:01:00 +02:00
Ahmad 10e32c96f5 Merge pull request #28535 from AhmadDurrani579:4.x
videoio(gstreamer): fix timestamp drift and color negotiation on Apple #28535

This commit addresses two issues on macOS with Apple M3 hardware:
1. Replaces floating-point timestamp math with gst_util_uint64_scale_int to ensure nanosecond precision.
2. Explicitly forces I420 format in the encoding profile to prevent hardware encoder negotiation failure.

### 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-04-02 13:59:01 +03:00
Alexander Smorkalov 2b31e057cf Merge pull request #28701 from cuiweixie:fix/dnn-batchnorm-bias-blob-index
dnn: fix BatchNorm bias blob index in validation
2026-04-02 13:02:27 +03:00
pratham-mcw 3cf98c51c8 Merge pull request #28609 from pratham-mcw:core-rotate-neon-optimization
core: add NEON implementation for rotate function #28609

- This PR adds a NEON intrinsics-based implementation for the rotate function in matrix_transform.cpp for Windows-ARM64.
- The optimized implementation uses  ARM NEON intrinsics to accelerate the internal transpose step used by the rotate function.
- In the x64 architecture, the rotate operation benefits from IPP-based optimized implementations. However, on ARM64, the execution falls back to the scalar implementation, which results in lower performance.
- To achieve performance parity with x64, a NEON-based SIMD implementation has been added for ARM64. 
- After introducing these changes, the rotate function showed noticeable performance improvements on ARM64 platforms.
<img width="1009" height="817" alt="image" src="https://github.com/user-attachments/assets/8bec0041-b19c-4fc8-9103-532746224515" />

 
- [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-31 16:52:04 +03:00
Alexander Smorkalov 92c43f80fc Merge pull request #28739 from pratham-mcw:core/fix-MeanStdDeviation-accuracytest
core: fix meanStdDev bug by using separate variables v2, v3 in sumsqr_
2026-03-31 15:39:16 +03:00
pratham-mcw c5d747f75c core: fix meanStdDev bug by using separate variables v2, v3 in sumsqr_ 2026-03-31 11:29:34 +05:30
Vincent Rabaud 5c91261ca0 Force step to be ptrdiff_t in resize
Otherwise, ASAN could return an error:
"runtime error: addition of unsigned offset"
2026-03-30 10:48:00 +02:00
SamareshSingh 2027a33990 Merge pull request #28724 from ssam18:fix/resize-ngraph-two-inputs-28707
dnn: fix Resize initNgraph for two-input case #28724

## Summary

Fixes the issue #28707

When a Resize/Upsample layer has two inputs, the data tensor and a reference tensor whose **shape** defines the output spatial size, the OpenVINO/NGRAPH backend's `initNgraph()` was ignoring `nodes[1]` entirely and relying solely on the `outHeight`/`outWidth` member variables.

These variables are set by `finalize()` from the pre-computed output blob dimensions. However, when the output shape is determined dynamically at runtime from the second input, `finalize()` sets them from the live tensor, but the OpenVINO backend calls `initNgraph()` to build a static compiled graph. If the member variables are 0 at that point, the compiled `Interpolate` node gets hardcoded with `{0, 0}` output dimensions, causing CV_Assert failure: {N,C,0,0} vs {N,C,H2,W2}
2026-03-30 10:06:54 +03:00
Anand Mahesh 4acd2ed6cc features2d: add OpenCL acceleration for BFMatcher cross-check
BFMatcher::match() with crossCheck=true previously skipped the OCL
dispatch in knnMatchImpl entirely, falling back to CPU even when UMat
inputs and an OpenCL device were available. This adds
ocl_matchWithCrossCheck() for CV_32FC1 descriptors (e.g. SIFT, SURF):
both the forward and reverse nearest-neighbour passes run on the GPU
via the existing ocl_matchSingle() kernel, then the cross-check filter
runs on the CPU. Only two small index arrays (1×N ints) are downloaded
— the O(N²×D) distance work stays on the device.

The OCL dispatch in knnMatchImpl is also refactored to unify the
Mat/UMat train collection selection before branching on crossCheck.

On a NVIDIA RTX 3060 with SIFT descriptors the OCL path is 6–9×
faster than CPU at 2k–10k features per image. Binary descriptors
(ORB, BRIEF — CV_8U) are unaffected; the existing type guard in
ocl_matchSingle keeps them on the CPU path as before.

Also adds a correctness test (Features2d_BFMatcher_CrossCheck) and an
OCL perf test (BruteForceMatcherFixture/MatchCrossCheck).
2026-03-29 21:45:08 +05:30
Anshu c7732e1043 Merge pull request #28397 from 0AnshuAditya0:fix-simd-oob-read-28396
Fixes #28396 : out-of-bounds read in SIMD type conversion #28397

Fixes #28396
Fixes #27080

The vx_load_expand function in WASM intrinsics was using 
wasm_v128_load which always loads a full 128-bit register 
(16 bytes), even when the function only needed 8 elements.

For example, when converting uint8 to float32:
- vx_load_expand needs 8 uint8 elements
- But wasm_v128_load reads 16 bytes from memory
- This causes an 8-byte out-of-bounds read

### 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-27 15:40:09 +03:00
Alexander Smorkalov 1630450d25 Merge pull request #28727 from asmorkalov:as/calibrate_perf_data
Replace calibration images with saved image points.
2026-03-27 14:59:33 +03:00
Alexander Smorkalov d45b442f4e Replace calibration images with saved image points. 2026-03-27 10:52:21 +03:00
Alexander Smorkalov 689d514885 Merge pull request #28698 from PDGGK:fix/android-utils-resource-leak
Fix resource leaks in Android Utils.java (#28697)
2026-03-26 15:33:04 +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
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
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