Эта программа работает, но не так, как ожидалось. У меня есть вектор 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;
}