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

35906 Commits

Author SHA1 Message Date
satyam yadav 15fe69b5af Merge pull request #28250 from satyam102006:fix/stackblur-overflow-28233
imgproc: fix heap-buffer-overflow in stackBlur #28233 #28250

### Summary
Fixes a heap-buffer-overflow in `cv::stackBlur` when the kernel size is larger than the image dimensions 
### Changes
* Added input validation to clamp the kernel size to the image dimensions.
* Added a regression test (`regression_28233`) covering 1x1 and small image cases.

Fixes #28233
2025-12-22 11:22:12 +03:00
Alexander Smorkalov a66443fdc2 Merge pull request #28265 from shahkarnav115-beep:dnn-blobfromimages-umat-error
dnn: add error message for unimplemented UMat NCHW blob conversion
2025-12-22 11:04:31 +03:00
satyam yadav 74fbfc2343 Merge pull request #28117 from satyam102006:fix/solveCubic-numerical-instability
core: fix solveCubic numerical instability via coefficient normalization (fixes #27748) #28117

 Summary
This PR fixes numerical instability in `cv::solveCubic` when the leading coefficient `a` is non-zero but extremely small relative to other coefficients (Issue #27748). 

It introduces a **normalization step** that scales all coefficients by their maximum magnitude before solving. This ensures robust detection of when the equation should degenerate to a quadratic solver, without breaking valid cubic equations that happen to have small coefficients (e.g., scaled by 1e-9).

The Problem (Issue #27748)
The previous implementation checked `if (a == 0)` to decide whether to use the cubic or quadratic formula. 
- When `a` is extremely small (e.g., 1e-17) but not exactly zero, and other coefficients are normal (e.g., 5.0), the standard cubic formula suffers from catastrophic cancellation and overflow, producing incorrect roots (e.g., 1e14).

 The Fix
1. Normalization: The solver now finds `max_coeff = max(|a|, |b|, |c|, |d|)` and scales all coefficients by `1.0 / max_coeff`.
2. Relative Threshold: It then checks `if (abs(a) < epsilon)` on the *normalized* coefficients. 

 Why this is better than previous attempts
In a previous attempt (PR #28057), a simple absolute check `abs(a) < epsilon` was proposed. That approach was rejected because it failed for scaled equations. 


Fixes #27748
2025-12-22 11:01:51 +03:00
Karnav Shah a714934c86 dnn: add error message for unimplemented UMat NCHW blob conversion 2025-12-22 01:25:48 +05:30
Abhishek Gola 66bb0a8017 Merge pull request #28164 from abhishek-gola:randomNormalLike_layer_4x
Added randomNormalLike layer to 4.x branch #28164

OpenCV Extra: https://github.com/opencv/opencv_extra/pull/1297
Backport of https://github.com/opencv/opencv/pull/28110 to 4.x

### 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
2025-12-21 20:18:28 +03:00
Alexander Smorkalov 8cf2e774b7 Merge pull request #28208 from asmorkalov:as/filters_stateless
Stateless HAL for filters and morphology. #28208

### 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
2025-12-20 13:30:09 +03:00
satyam yadav 2b42788803 Merge pull request #28217 from satyam102006:feature/dis-coarsest-scale
[video] Add setCoarsestScale to DISOpticalFlow (Fixes #25068) #28217

### Description
This PR addresses issue #25068 regarding the number of scales in `DISOpticalFlow`.

Currently, `DISOpticalFlow` automatically computes the `coarsest_scale` based on the image size. While generally effective, this behavior can cause errors in specific use cases (e.g., mechanics/speckle pattern analysis) where high pyramid levels degrade quality.

This change introduces a manual override:
- Added `setCoarsestScale(int val)` and `getCoarsestScale()` to the public API.
- Updated `DISOpticalFlowImpl::calc` and `ocl_calc` to use the user-defined scale if set.
- Preserved the existing "automatic" behavior as the default (when set to -1).

### Changes
- **`modules/video/include/opencv2/video/tracking.hpp`**: Added virtual method declarations.
- **`modules/video/src/dis_flow.cpp`**: Implemented `set/getCoarsestScale` in `DISOpticalFlowImpl` and updated calculation logic.
- **`modules/video/test/test_OF_accuracy.cpp`**: Added `DenseOpticalFlow_DIS.ManualCoarsestScale` regression test.


Fixes #25068
2025-12-20 13:28:32 +03:00
Alexander Smorkalov 64755d0c3a Merge pull request #28248 from ramukhsuya:tflite-minimum-support
DNN: Add TFLite Minimum layer support
2025-12-20 13:18:33 +03:00
Alexander Smorkalov da6a671b46 Merge pull request #28249 from vrabaud:msan
Fix potential overflow
2025-12-20 13:15:51 +03:00
happy-capybara-man 78c27ba4a6 Revert "Merge pull request #27985 from happy-capybara-man:docs/fix-mat-clone-js"
This reverts commit db207c88b0.
2025-12-20 15:23:15 +08:00
Vincent Rabaud 5d8ab389f8 Fix potential overflow
Fixes https://g-issues.oss-fuzz.com/issues/470321412
2025-12-19 16:59:18 +01:00
ramukhsuya 43053327ff DNN: Add TFLite Minimum layer support 2025-12-19 20:41:38 +05:30
Alexander Smorkalov 9f9b6e8dd3 Merge pull request #28246 from brianferri:4.x
fix: Invalid operands to binary expression
2025-12-19 15:12:31 +03:00
Alexander Smorkalov a3380cc128 Code review fixes. 2025-12-19 14:59:45 +03:00
Dmitry Kurtaev 43074571af Merge pull request #28163 from dkurt:d.kurtaev/convexHull_repeats
Keep convexHull output indices monotone if possible #28163

### Pull Request Readiness Checklist

resolves https://github.com/opencv/opencv/issues/24907 ?
resolves https://github.com/opencv/opencv/issues/4954

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
2025-12-19 14:41:21 +03:00
Brian Ferri 93f1413db9 fix: Invalid operands to binary expression 2025-12-19 10:49:36 +01:00
AdwaithBatchu 5f0bd387db optimize: replace push_back with emplace_back in core loops
Replaces wasteful temporary object construction with in-place construction using emplace_back. Covers hot paths in objdetect, imgproc, and stitching modules.
2025-12-19 11:56:20 +05:30
happy-capybara-man 4946b97c3d js: remove empty line before EOF in helpers.js 2025-12-19 02:56:25 +08:00
Alexander Smorkalov b157553e55 Merge pull request #28202 from satyam102006:fix-27372-dshow-whitebalance-mapping
videoio(dshow): Fix incorrect mapping for White Balance Temperature property
2025-12-18 18:17:36 +03:00
ramukhsuya 44b31dd82c Merge pull request #28171 from ramukhsuya:tflite-maximum-support
dnn(tflite): add support for MAXIMUM layer #28171

Fixes #26433
This PR adds support for the `MAXIMUM` layer in the TFLite importer.
It maps the TFLite `MAXIMUM` opcode to the existing OpenCV Element-wise `Max` operation.

### 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
2025-12-18 17:55:04 +03:00
Alexander Smorkalov bbda4e8964 Merge pull request #28226 from vrabaud:msan
Fix potential pointer overflow.
2025-12-18 14:53:10 +03:00
HARSH SUMAN e3e87055bd Merge pull request #28195 from harsh-suman5:fix-coverage-regex
Fix regex escape warning in _coverage.py by using raw string #2819

while i am running '_coverage.py' I noticed there is a syntax warning:"\." It is an invalid escape sequence
The regex was written as a normal string with '\.' which is not valid escape in string literals and give problems and error in a new python versions. 
To fix this switch to raw string(r'cv2?\.\w+') which can passes the backslashes directly to the regex engine. This removes the warning and keeps the code  and pattern working properly.

This is a small fix but important for future compatibilities.
2025-12-18 14:52:20 +03:00
Alexander Smorkalov f23969a07a Merge pull request #28220 from asmorkalov:as/kleidicv_0.7
KleidiCV update to version 0.7.
2025-12-18 14:33:40 +03:00
AdwaithBatchu 87f4a9782c Merge pull request #28203 from AdwaithBatchu:fix-macos-lapack-warnings
core: suppress LAPACK deprecation warnings on macOS #28203

### Description
On macOS (Apple Silicon) with newer Xcode/Clang, the CLAPACK interface is deprecated.
Compiling `hal_internal.cpp` triggers multiple warnings like:
`warning: 'sgesv_' is deprecated: first deprecated in macOS 13.3 - The CLAPACK interface is deprecated. [-Wdeprecated-declarations]`

Since migrating to the new Accelerate interface (Apple's recommended fix) requires significant changes to the HAL implementation and breaks the build if headers are mismatched, this PR takes the pragmatic approach. It suppresses the `-Wdeprecated-declarations` warning for this specific file using Clang pragmas to clean up the build output.

### Verification
- [x] Verified build is silent on macOS (M3).
- [x] Verified pragmas are correctly scoped within `HAVE_LAPACK` to prevent scope mismatch on non-LAPACK builds.

### 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
2025-12-18 13:53:56 +03:00
Karnav Shah dc52acc7d1 Merge pull request #28200 from shahkarnav115-beep:fix-avif-null-checks
imgcodecs(avif): add safety checks for AVIF decoder and encoder #28200

Add defensive checks to prevent potential null dereference in AVIF decoder and encoder paths when handling malformed input or allocation failures.

### 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
2025-12-18 12:47:35 +03:00
Vincent Rabaud 91a745adc5 Fix potential pointer overflow.
It is undefined behavior in C++ to compute an adress out of the
allocated zone (even when not dereferencing).
https://en.cppreference.com/w/cpp/language/operator_arithmetic.html#Pointer_arithmetic
2025-12-18 10:26:04 +01:00
Alexander Smorkalov 0af685708b Merge pull request #28211 from pratham-mcw:fix/neon-dotprod-expand-overflow
NEON: fix dot product accumulation causing NORM test failures on Windows ARM64
2025-12-18 11:39:46 +03:00
Alexander Smorkalov 721bb7289d Merge pull request #28185 from asmorkalov:as/static_analysys_fix
Fixed issues identified by PVS Studio #28185

Partially fixes https://github.com/opencv/opencv/issues/28167
Paper: https://pvs-studio.com/en/blog/posts/cpp/1321/

Closed items: N2, N4, N5, N6, N7, N8, N10, N11, N13, N14.

To be continued...

### 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
2025-12-18 11:32:19 +03:00
Alexander Smorkalov 6aa1228ec1 KleidiCV update to version 0.7. 2025-12-18 09:51:09 +03:00
Alexander Smorkalov a858fb7cff Stateless HAL for filters and morphology. 2025-12-18 09:36:54 +03:00
Alexander Smorkalov 0ca4117c27 Merge pull request #28198 from asmorkalov:as/gapi_static_analysis
Fixes for issues found by PVS Studio in GAPI module.
2025-12-17 22:13:41 +03:00
happy-capybara-man 8ea50a77fd js: restore deep copy behavior for Mat.clone()
Emscripten 3.1.71+ introduced ClassHandle.clone() which performs a shallow copy.
This shadowed the original OpenCV clone() method which was intended for deep copying.

This patch:
1. Hooks into onRuntimeInitialized in helpers.js
2. Overrides cv.Mat.prototype.clone to point to mat_clone (deep copy)
3. Updates JS tests to use clone() to verify the fix
2025-12-18 01:39:27 +08:00
satyam yadav dbe11a4d1c Update cap_dshow.cpp 2025-12-16 23:46:29 +05:30
Alexander Smorkalov e4d294d018 Merge pull request #28196 from vrabaud:msan
Prevent integer overflow in dimension checks.
2025-12-16 20:47:06 +03:00
Alexander Smorkalov 9f1a2d3736 Fixes for issues found by PVS Studio. 2025-12-16 18:34:20 +03:00
Alexander Smorkalov 2a29d87e1d Merge pull request #28137 from Ghazi-raad:fix/null-pointer-gapi-state-28095-v2
Fix null pointer dereference in G-API stateful kernels
2025-12-16 15:17:58 +03:00
Vincent Rabaud 5c6c584c01 Prevent integer overflow in dimension checks.
This fixes https://g-issues.oss-fuzz.com/issues/446726230
2025-12-16 13:09:31 +01:00
Alexander Smorkalov c03734475f Merge pull request #28159 from asmorkalov:as/java_cleaners
Introduce option to generate Java code with finalize() or Cleaners interface #28159
 
Closes https://github.com/opencv/opencv/issues/22260
Replaces https://github.com/opencv/opencv/pull/23467

The PR introduce configuration option to generate Java code with Cleaner interface for Java 9+ and old-fashion finalize() method for old Java and Android. Mat class and derivatives are manually written. The PR introduce 2 base classes for it depending on the generator configuration.

Pros:
1. No need to implement complex and error prone cleaner on library side.
2. No new CMake templates, easier to modify code in IDE.

Cons:
1. More generator branches and different code for modern desktop and Android.

TODO: 
- [x] Add Java version check to cmake
- [x] Use Cleaners for ANDROID API 33+

### 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
2025-12-16 14:21:34 +03:00
Alex 7ca9d9ce03 Merge pull request #27878 from 0lekW:ffmpeg-negative-dts-seeking-fix
Fix frame seeking with negative DTS values in FFMPEG backend #27878

**Merge with extra**: https://github.com/opencv/opencv_extra/pull/1289

Fixes https://github.com/opencv/opencv/issues/27819
Fixes https://github.com/opencv/opencv/issues/23472
Accompanied by PR on https://github.com/opencv/opencv_extra/pull/1289

The FFmpeg backend fails to correctly seek in H.264 videos that contain negative DTS values in their initial frames. This is a valid encoding practice used by modern video encoders (such as DaVinci Resolve's current export) where B-frame reordering causes the first few frames to have negative DTS values.

When picture_pts is unavailable (AV_NOPTS_VALUE), the code falls back to using pkt_dts:
`picture_pts = packet_raw.pts != AV_NOPTS_VALUE_ ? packet_raw.pts : packet_raw.dts;`

If this DTS value is negative (which is legal per H.264 spec), it propagates through the frame number calculation:
`frame_number = dts_to_frame_number(picture_pts) - first_frame_number;`

This results in negative frame numbers, messing up seeking operations.

Solution implemented in this branch is a timestamp normalization similar to FFmpegs -avoid_negative_ts_make_zero flag:
- Calculate a global offset once on the first decoded frame by getting the minimum timestamp in either:
    - Container start_time
    - Stream start_time
    - First observed timestamp (PTS, then DTS).
- Apply the offset consistently to all timestamps, shifting negative values to begin at 0 while keeping relative timing.
- Simplify timestamp converters to remove `start_time` subtractions since timestamps are pre-normalized.

This also includes a new test `videoio_ffmpeg.seek_with_negative_dts`
This test verifies that seeking behavior performs as expected on a file which has negative DTS values in the first frames. 
A PR on opencv_extra accompanies this one with that testing file: https://github.com/opencv/opencv_extra/pull/1279

```
opencv_extra=ffmpeg-videoio-negative-dts-test-data
```

<cut/>

### 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
2025-12-16 11:38:51 +03:00
Abhishek Gola 33ebceddb2 Merge pull request #28168 from abhishek-gola:mergeDebevec_fix
Added 16U and 32F support in merge functions in photo module #28168

closes: https://github.com/opencv/opencv/issues/27873
### 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
2025-12-16 10:45:19 +03:00
Kumataro 9c48c69c8a Merge pull request #28179 from Kumataro:fix28178
js: add C++17 requirement check for Emscripten 4.0.20+ #28179
 
Close https://github.com/opencv/opencv/issues/28178

### 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
2025-12-16 10:41:43 +03:00
Alexander Smorkalov fdb1ad3aa4 Merge pull request #28156 from asmorkalov:as/cuda_bufferpool_raise
Enabled Python test for CUDA BufferPool.
2025-12-16 10:37:50 +03:00
Alexander Smorkalov 75ede342cf Merge pull request #28186 from shahkarnav115-beep:fix-stitching-argparse-safety
samples(python): fix argparse boolean flag for --try_cuda
2025-12-16 10:22:19 +03:00
Alexander Smorkalov 507a0a6c5a Merge pull request #28192 from shahkarnav115-beep:fix-sample-launcher-selection
Fix crash in sample launcher when no item is selected
2025-12-16 10:21:54 +03:00
Karnav Shah 4e2c39b1a0 Fix crash in sample launcher when no item is selected 2025-12-16 11:30:55 +05:30
Alexander Smorkalov 7291f638b6 Merge pull request #28182 from shahkarnav115-beep:samples-guard-stft-timestep
samples(python): guard against invalid STFT time step
2025-12-15 19:26:01 +03:00
pratham-mcw ddf2863aaa NEON: fix incorrect accumulation in v_dotprod_expand_fast 2025-12-15 21:29:10 +05:30
Karnav Shah 1eb1157490 samples(python): fix argparse boolean flag for --try_cuda 2025-12-15 15:53:04 +05:30
Karnav Shah 9a7e88eb3e samples(python): guard against invalid STFT time step 2025-12-15 15:04:10 +05:30
Yuantao Feng 912d27a7b7 Merge pull request #28180 from fengyuentau:rvv_hal/flip
rvv_hal: fix flip inplace #28180

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

### 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
2025-12-15 10:51:48 +03:00