使用cv :: UMat时断言失败(u-> refcount == 0)

时间:2019-05-28 13:16:07

标签: c++ opencv

我写了一个小程序来对使用cv::Matcv::UMat的算法进行基准测试。 代码运行无错误,直到main结束并在UMat::release中引发断言错误而崩溃:

  

OpenCV(3.4.3)错误:在cv :: StdMatAllocator :: deallocate中断言失败(u-> refcount == 0),文件c:\ develop \ 3rdparty \ opencv-3.4.3 \ modules \ core \ src \ matrix.cpp,第169行

在调试和发布模式下均会发生错误(我在Visual Studio 2017上进行构建)。 我将代码简化到最低限度,并提出了以下示例,该示例仍然引发错误:

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

using namespace std;

template <typename MatType>
tuple<MatType, MatType> foo(const MatType& in)
{
    MatType A(in.size(), in.type());
    MatType B(in.size(), in.type());
    return { A, B };
}

int main()
{
    const int num_repetitions = 100;
    const int downscale_factor = 5;

    cv::Mat in = cv::Mat::ones({200,200}, CV_8U);
    cv::Mat A_out, B_out;
    tie(A_out, B_out) = foo(in); // no problem here

    cv::UMat in_umat = in.getUMat(cv::ACCESS_READ);
    cv::UMat A_umat, B_umat;
    tie(A_umat, B_umat) = foo(in_umat); // no problem here
    A_out = A_umat.getMat(cv::ACCESS_READ);
    B_out = B_umat.getMat(cv::ACCESS_READ);
    return 0; // we never get here
}

我不明白,我是否在管理某些cv::UMat错误的寿命?

0 个答案:

没有答案