Программа блокируется примерно через 20 секунд после исключения из функции opencv через 1 секунду асинхронного тайм-аута - PullRequest
0 голосов
/ 22 января 2020

Эта программа работает, но не так, как ожидалось. У меня есть вектор Mat (изображения / кадры), и я пытаюсь найти углы шахматной доски с функцией opencv (внутри для l oop). Кадры взяты из видео. Когда углы шахматной доски не обнаруживаются, программе требуется вечность (часы), чтобы вернуть false. Итак, я создал тайм-аут. И это фактически останавливает шаг findChessboardCorners в течение 1 секунды. Тем не менее, программа не способна завершить sh l oop до этих 20 секунд (это зависит от способа). И я понятия не имею, почему ... Я уже пытался создать исключение в try / catch, и это было еще медленнее. Спасибо за помощь.

    std::future<bool> future = std::async(std::launch::async, [&]()
    {
        bool found = findChessboardCorners(*iter, chessboardDimensions, pointBuf, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE);
        return found;
    });

    std::cout << "waiting...\n";
    std::future_status status;
    do
    {
        status = future.wait_for(std::chrono::seconds(1));
        if (status == std::future_status::timeout)
        {
            std::cout << "timeout\n";
            tryFindCorners = false;
        }
        else if (status == std::future_status::ready)
        {
            std::cout << "ready!\n";
            found = future.get();
            cout << found << endl;
            tryFindCorners = false;
        }

    } while (tryFindCorners);

    if (found)
    {
        drawChessboardCorners(*iter, chessboardDimensions, pointBuf, found);
        allFoundCorners.push_back(pointBuf);
        cout << "drawn" << fileNames[i] << endl << endl;
        imwrite("drawn" + fileNames[i], *iter);
    }
    else
    {
        cout << "Could not find corners for: " << fileNames[i] << endl << endl;
    }
...