- 07 9月, 2023 2 次提交
-
-
由 jason_w 提交于
Fixed the channels when capturing yuv422 with v4l2 backend #24180 example to reproduce the problem ```cpp #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/videoio.hpp> using namespace cv; using namespace std; void help_func(VideoCapture& cap) { int height = cap.get(cv::CAP_PROP_FRAME_HEIGHT); int width = cap.get(cv::CAP_PROP_FRAME_WIDTH); int pixel_type = cap.get(cv::CAP_PROP_FORMAT); int channels = CV_MAT_CN(pixel_type); int pixel_bytes = CV_ELEM_SIZE(pixel_type); bool to_bgr = static_cast<bool>(cap.get(cv::CAP_PROP_CONVERT_RGB)); std::cout << "backend: " << cap.getBackendName() << std::endl; std::cout << std::hex << "fourcc: " << static_cast<int>(cap.get(cv::CAP_PROP_FOURCC)) << std::endl; std::cout << std::boolalpha << "to_bgr: " << to_bgr << std::endl; std::cout << std::dec << "height: " << height << " width: " << width << " channels: " << channels << " pixel_bytes: " << pixel_bytes << std::endl; std::cout << "-----------------------------------------" << std::endl; } int main(int, char**) { VideoCapture cap; cap.open("/dev/video0"); if (!cap.isOpened()) { cerr << "ERROR! Unable to open camera\n"; return -1; } { help_func(cap); } { cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1080); cap.set(cv::CAP_PROP_FRAME_WIDTH, 1920); cap.set(cv::CAP_PROP_CONVERT_RGB, 0); help_func(cap); } // { // cap.set(cv::CAP_PROP_CONVERT_RGB, 0); // cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1080); // cap.set(cv::CAP_PROP_FRAME_WIDTH, 1920); // help_func(cap); // } Mat frame; int frame_idx = 0; while (cap.read(frame)) { std::cout << "frame index: " << frame_idx++ << std::endl; help_func(cap); if (frame.empty()) { cerr << "ERROR! blank frame grabbed\n"; break; } Mat bgr; if (cap.get(cv::CAP_PROP_CONVERT_RGB)) { bgr = frame; } else { cv::cvtColor(frame, bgr, cv::COLOR_YUV2BGR_YUYV); } imshow("frame", bgr); if (waitKey(5) >= 0) { break; } } return 0; } ``` The above code will get the wrong channels. By changing lines 41-45 like below, can get the correct channels. <img width="747" alt="code" src="https://github.com/opencv/opencv/assets/16932438/55f44463-8465-4dba-a979-e71a50d58008"> This is because `cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1080);` and `cap.set(cv::CAP_PROP_FRAME_WIDTH, 1920);` reinitialize the `frame`, but `cap.set(cv::CAP_PROP_CONVERT_RGB, 0);` not. Log info. <img width="691" alt="log" src="https://github.com/opencv/opencv/assets/16932438/236e3b26-f5b2-447a-b202-bcd607c71af6"> We can also observe that we get the correct channels in the while loop. This is because: https://github.com/opencv/opencv/blob/ca0bd70cde431b1dd211254011dd9bcf965f582f/modules/videoio/src/cap_v4l.cpp#L2309-L2310 reinitialize the `frame`.
-
由 BeanJoy 提交于
Modify the outputVideoFormat after changing the output format in MSMF backend #24142 After changing the output format, need to modify the outputVideoFormat, otherwise the outputVideoFormat is always CV_CAP_MODE_BGR, and an error will occur when converting the format in retrieveVideoFrame(), and will always enter "case CV_CAP_MODE_BGR:" process. ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [ ] I agree to contribute to the project under Apache 2 License. - [ ] 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. - [x] The feature is well documented and sample code can be built with the project CMake Co-authored-by: N李龙 <lilong@sobey.com>
-
- 06 9月, 2023 6 次提交
-
-
由 Alexander Smorkalov 提交于
Add missing std namespace qualifiers
-
由 Alexander Smorkalov 提交于
Fix bug at blobFromImagesWithParams
-
由 Yuriy Chernyshov 提交于
-
由 CSBVision 提交于
-
由 Alexander Smorkalov 提交于
Add missing <sstream> includes
-
由 Yuriy Chernyshov 提交于
-
- 05 9月, 2023 13 次提交
-
-
由 Alexander Smorkalov 提交于
Fix "use after free" issue in `essential_solver.cpp`
-
由 Dmitry Kurtaev 提交于
Use ngraph::Output in OpenVINO backend wrapper #24196 ### Pull Request Readiness Checklist resolves https://github.com/opencv/opencv/issues/24102 * Use `ngraph::Output<ngraph::Node>>` insead of `std::shared_ptr<ngraph::Node>` as a backend wrapper. It lets access to multi-output nodes: https://github.com/opencv/opencv/blob/588ddf1b181aa7243144b27d65fc7690fb89e344/modules/dnn/src/net_openvino.cpp#L501-L504 * All layers can be customizable with OpenVINO >= 2022.1. nGraph reference code used for default layer implementation does not required CPU plugin also (might be tested by commenting CPU plugin at `/opt/intel/openvino/runtime/lib/intel64/plugins.xml`). * Correct inference if only intermediate blobs requested. 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
-
由 Yuriy Chernyshov 提交于
Properly preserve chi_table license as mandated by BSD-3-Clause #24204 Amend reference to online hosted file with the full license quotation as mandated by the original license.
-
由 Alexander Smorkalov 提交于
Revert PR 24186 as it forces skipping tests
-
由 Alexander Smorkalov 提交于
fix refineDetectedMarkers
-
由 Dmitry Kurtaev 提交于
Fix distanceTransform for inputs with large step and height #24214 ### Pull Request Readiness Checklist resolves https://github.com/opencv/opencv/issues/23895 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
-
由 Alexander Smorkalov 提交于
-
由 Alexander Smorkalov 提交于
Fixed bug with the last 4 bytes in MJPEG encoder
-
由 Dmitry Kurtaev 提交于
Minor optimization of two lines intersection #24216 ### Pull Request Readiness Checklist Not significant, but we can reduce number of multiplications while compute two lines intersection. Both methods are used heavily in their modules. 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
-
由 Alexander Lyulkov 提交于
-
由 Alexander Smorkalov 提交于
Increase the test threshold of FastRCNN_vgg166 and FastRCNN_zf when FAST_MATH enable
-
由 Wanli 提交于
-
由 Philipp Schrader 提交于
The address sanitizer highlighted this issue in our code base. It looks like the code is currently grabbing a pointer to a temporary object and then performing operations on it. I printed some information right before the asan crash: eigensolver address: 0x7f0ad95032f0 eigensolver size: 4528 eig_vecs_ ptr: 0x7f0ad95045e0 eig_vecs_ offset: 4848 This shows that `eig_vecs_` points past the end of `eigensolver`. In other words, it points at the temporary object created by the `eigensolver.eigenvectors()` call. Compare the docs for `.eigenvalues()`: https://eigen.tuxfamily.org/dox/classEigen_1_1EigenSolver.html#a0f507ad7ab14797882f474ca8f2773e7 to the docs for `.eigenvectors()`: https://eigen.tuxfamily.org/dox/classEigen_1_1EigenSolver.html#a66288022802172e3ee059283b26201d7 The difference in return types is interesting. `.eigenvalues()` returns a reference. But `.eigenvectors()` returns a matrix. This patch here fixes the problem by saving the temporary object and then grabbing a pointer into it. This is a curated snippet of the original asan failure: ==12==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fc633704640 at pc 0x7fc64f7f1593 bp 0x7ffe8875fc90 sp 0x7ffe8875fc88 READ of size 8 at 0x7fc633704640 thread T0 #0 0x7fc64f7f1592 in cv::usac::EssentialMinimalSolverStewenius5ptsImpl::estimate(std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&) const /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/usac/essential_solver.cpp:181:48 #1 0x7fc64f915d92 in cv::usac::EssentialEstimatorImpl::estimateModels(std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&) const /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/usac/estimator.cpp:110:46 #2 0x7fc64fa74fb0 in cv::usac::Ransac::run(cv::Ptr<cv::usac::RansacOutput>&) /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/usac/ransac_solvers.cpp:152:58 #3 0x7fc64fa6cd8e in cv::usac::run(cv::Ptr<cv::usac::Model const> const&, cv::_InputArray const&, cv::_InputArray const&, int, cv::Ptr<cv::usac::RansacOutput>&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&) /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/usac/ransac_solvers.cpp:1010:16 #4 0x7fc64fa6fb46 in cv::usac::findEssentialMat(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, int, double, double, cv::_OutputArray const&) /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/usac/ransac_solvers.cpp:527:9 #5 0x7fc64f3b5522 in cv::findEssentialMat(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, int, double, double, int, cv::_OutputArray const&) /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/five-point.cpp:437:16 #6 0x7fc64f3b7e00 in cv::findEssentialMat(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, int, double, double, cv::_OutputArray const&) /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/five-point.cpp:486:12 ... Address 0x7fc633704640 is located in stack of thread T0 at offset 17984 in frame #0 0x7fc64f7ed4ff in cv::usac::EssentialMinimalSolverStewenius5ptsImpl::estimate(std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&) const /proc/self/cwd/external/com_github_opencv_opencv/modules/calib3d/src/usac/essential_solver.cpp:36 This frame has 63 object(s): [32, 56) 'coefficients' (line 38) [96, 384) 'ee' (line 55) ... [13040, 17568) 'eigensolver' (line 142) [17824, 17840) 'ref.tmp518' (line 143) [17856, 17872) 'ref.tmp523' (line 144) [17888, 19488) 'ref.tmp524' (line 144) <== Memory access at offset 17984 is inside this variable [19616, 19640) 'ref.tmp532' (line 169) ... The crash report says that we're accessing a temporary object from line 144 when we shouldn't be. Line 144 looks like this: https://github.com/opencv/opencv/blob/4.6.0/modules/calib3d/src/usac/essential_solver.cpp#L144 const auto * const eig_vecs_ = (double *) eigensolver.eigenvectors().real().data(); We are using version 4.6.0 for this, but the problem is present on the 4.x branch. Note that I am dropping the .real() call here. I think that is safe because of the code further down (line 277 in the most recent version): const int eig_i = 20 * i + 12; // eigen stores imaginary values too The code appears to expect to have to skip doubles for the imaginary parts of the complex numbers. Admittedly, I couldn't find a test case that exercised this code path to validate correctness.
-
- 04 9月, 2023 9 次提交
-
-
由 Alex 提交于
-
由 alexander-varjo 提交于
Fix crash in ap3p #23607 ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [ ] I agree to contribute to the project under Apache 2 License. - [ ] 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
-
由 Alexander Smorkalov 提交于
removing unreachable codes in `gbackend`
-
由 Alexander Smorkalov 提交于
Fix fullscreen behavior for macOS
-
由 Alexander Smorkalov 提交于
core: arm64: v_round() works with round to nearest, ties to even.
-
由 Dmitry Matveev 提交于
G-API: Introduce a Queue Source #24178 - Added a new IStreamSource class: in fact, a wrapper over a concurrent queue; - Added minimal example on how it can be used; - Extended IStreamSource with optional "halt" interface to break the blocking calls in the emitter threads when required to stop. - Introduced a QueueInput class which allows to pass the whole graph's input vector at once. In fact it is a thin wrapper atop of individual Queue Sources. There is a hidden trap found with our type system as described in https://github.com/orgs/g-api-org/discussions/2 While it works even in this form, it should be addressed somewhere in the 5.0 timeframe. ### 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
-
由 Alexander Smorkalov 提交于
imgcodecs: fix libtiff URL in opencv source code
-
由 Kumataro 提交于
-
由 Alexander Smorkalov 提交于
Fix compilation on arm64 with FP16 when disabled
-
- 30 8月, 2023 1 次提交
-
-
由 Yuantao Feng 提交于
* add broadcast_to with tests * change name * fix test * fix implicit type conversion * replace type of shape with InputArray * add perf test * add perf tests which takes care of axis * v2 from ficus expand * rename to broadcast * use randu in place of declare * doc improvement; smaller scale in perf * capture get_index by reference
-
- 29 8月, 2023 1 次提交
-
-
由 Sam James 提交于
If building with -mcpu=native or any other setting which implies the current CPU has FP16 but with intrinsics disabled, we mistakenly try to use it even though convolution.hpp conditionally defines it correctly based on whether we should *use it*. convolution.cpp on the other hand was mismatched and trying to use it if the CPU supported it, even if not enabled in the build system. Make the guards match. Bug: https://bugs.gentoo.org/913031Signed-off-by: NSam James <sam@gentoo.org>
-
- 28 8月, 2023 1 次提交
-
-
由 Vincent Rabaud 提交于
* Fix compilation when forcing later C++. * Remove random_shuffle. * Remove random_shuffle.
-
- 27 8月, 2023 1 次提交
-
-
由 Kumataro 提交于
-
- 25 8月, 2023 1 次提交
-
-
由 Dmitry Kurtaev 提交于
Skip test on SkipTestException at fixture's constructor * Skip test on SkipTestException at fixture's constructor * Add warning supression * Skip Python tests if no test file found * Skip instances of test fixture with exception at SetUpTestCase * Skip test with exception at SetUp method * Try remove warning disable * Add CV_NORETURN * Remove FAIL assertion * Use findDataFile to throw Skip exception * Throw exception conditionally
-
- 24 8月, 2023 1 次提交
-
-
由 Kumataro 提交于
* core:add OPENCV_IPP_MEAN/MINMAX/SUM option to enable IPP optimizations * fix: to use guard HAVE_IPP and ocv_append_source_file_compile_definitions() macro. * support OPENCV_IPP_ENABLE_ALL * add document for OPENCV_IPP_ENABLE_ALL * fix OPENCV_IPP_ENABLE_ALL comment
-
- 23 8月, 2023 2 次提交
-
-
由 Alexander Alekhin 提交于
-
由 Dmitry Kurtaev 提交于
-
- 18 8月, 2023 2 次提交
-
-
由 Alexander Alekhin 提交于
-
由 Alexander Alekhin 提交于
-