1. 07 9月, 2023 2 次提交
    • J
      Merge pull request #24180 from MambaWong:4.x · e8f94182
      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`.
      e8f94182
    • BeanJoy's avatar
      Merge pull request #24142 from beanjoy:4.x · d0de575a
      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>
      d0de575a
  2. 06 9月, 2023 6 次提交
  3. 05 9月, 2023 13 次提交
    • A
      Merge pull request #24211 from philsc:fix-asan-crash · 91808e64
      Alexander Smorkalov 提交于
      Fix "use after free" issue in `essential_solver.cpp`
      91808e64
    • D
      Merge pull request #24196 from dkurt:ov_backend_cleanups · 178fdbbd
      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
      178fdbbd
    • Y
      Merge pull request #24204 from georgthegreat:mser-license · 2c53e3f5
      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.
      2c53e3f5
    • A
      Merge pull request #24223 from asmorkalov:as/24186_revert · af9be78e
      Alexander Smorkalov 提交于
      Revert PR 24186 as it forces skipping tests
      af9be78e
    • A
      Merge pull request #24139 from AleksandrPanov:fix_refineDetectedMarkers · c9d70d46
      Alexander Smorkalov 提交于
      fix refineDetectedMarkers
      c9d70d46
    • D
      Merge pull request #24214 from dkurt:distanceTransform_big_step · c4c2e2e7
      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
      c4c2e2e7
    • A
      Revert PR 24186 as it force skip tests. · cca4ee2e
      Alexander Smorkalov 提交于
      cca4ee2e
    • A
      Merge pull request #24209 from alexlyulkov:al/fixed-mjpeg · 21fb10c6
      Alexander Smorkalov 提交于
      Fixed bug with the last 4 bytes in MJPEG encoder
      21fb10c6
    • D
      Merge pull request #24216 from dkurt:inter_lines_less_compute · 6ae7caaa
      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
      6ae7caaa
    • A
      f280e3cb
    • A
      Merge pull request #24221 from WanliZhong:issue_24016 · 9eba360e
      Alexander Smorkalov 提交于
      Increase the test threshold of FastRCNN_vgg166 and FastRCNN_zf when FAST_MATH enable
      9eba360e
    • W
      increase Fast Math threshold · 84f32bbb
      Wanli 提交于
      84f32bbb
    • P
      Fix "use after free" issue in `essential_solver.cpp` · c91c631a
      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.
      c91c631a
  4. 04 9月, 2023 9 次提交
  5. 30 8月, 2023 1 次提交
    • Y
      core: add broadcast (#23965) · a308dfca
      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
      a308dfca
  6. 29 8月, 2023 1 次提交
    • S
      Fix compilation on arm64 with FP16 when disabled · c20febdb
      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>
      c20febdb
  7. 28 8月, 2023 1 次提交
  8. 27 8月, 2023 1 次提交
  9. 25 8月, 2023 1 次提交
    • D
      Merge pull request #24186 from dkurt:ts_fixture_constructor_skip · 588ddf1b
      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
      588ddf1b
  10. 24 8月, 2023 1 次提交
    • K
      Merge pull request #24179 from Kumataro:fix24145 · 81cc89a3
      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
      81cc89a3
  11. 23 8月, 2023 2 次提交
  12. 18 8月, 2023 2 次提交