Ошибка подтверждения (u-> refcount == 0) при использовании cv :: UMat - PullRequest
0 голосов
/ 28 мая 2019

Я написал небольшую программу для тестирования алгоритма при использовании cv::Mat против cv::UMat.Код выполняется без ошибок до конца main, когда происходит сбой с ошибкой подтверждения, возникшей в UMat::release:

OpenCV (3.4.3) Ошибка: подтверждение не выполнено (u-> refcount== 0) в cv :: StdMatAllocator :: deallocate, файл c: \velop \ 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 неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...