У меня проблема с cv::imshow
. Обычно он потребляет около 1-2 мс времени обработки для моего размера изображения, но в какой-то момент моего процесса обработки он использует 4-8 мс для одного и того же изображения.cv :: imshow иногда очень медленный
У меня есть метод
void Tool::displayImage()
{
startTimeMeasure();
cv::imshow("output",image);
evaluateTimeMeasure();
}
image
является переменной-члена и окно highgui создается где-то в другом месте. Измерение времени работает с boost::posix_time ptime
и time_duration
.
cvStartWindowThread();
был вызван.
Дело в том, что если displayImage()
называется в сложной технологической цепочке (погрузка изображения из видеофайла, некоторые предварительной обработки и т.д.), cv::imshow
становится очень медленным, в то время как вызов в «паузу» видео перерисовывать обновленный образ очень быстро.
Если я добавлю cv::waitKey(10)
до начала измерения времени, cv::imshow
тоже быстро. Так могут быть некоторые (gui?) Вещи, которые необходимо обработать, которые блокируют cv::imshow
? cv::waitKey(40)
вызывается в отдельном потоке в петле, который ждет ввода клавиатуры для управления (например, пауза/возобновление) видео. Насколько я знаю, cv::imshow
выполняется в какой-то очереди, которая обрабатывается во время cv::waitKey
раз?!? Где я могу найти информацию обо всех задачах, которые выполняются в это время? Может быть, я могу изменить некоторые части моего кода (действительно сложный к настоящему времени), чтобы позволить быстрее imshow
все время.
И что происходит в вызове cv::imshow
и каковы могут быть причины медленного/быстрого выполнения одного и того же вызова в разных ситуациях?
EDIT: одна разницы я узнал между регулярным исполнением и обработкой в режиме «пауза» в том, что в режиме паузы метод запускается из связанной функции мыши обратного вызова (что внутри windowThread
?) В то время как в обычном режиме он запускается из основного потока обработки.
Любой шанс, что вы нашли объяснение? –
nope ... но did not (должен) следовать за этим дальше ... – Micka