Вы увеличиваете g_slider_position в коде дважды, поэтому он будет увеличиваться за пределы своего предела (установите в cvCreateTrackbar
как frames
). Это может привести к зависанию изображения.
Чтобы исправить, измените это
g_slider_position++;
cvSetTrackbarPos(
"Position",
"The Tom 'n Jerry Show",
++g_slider_position
);
до
cvSetTrackbarPos(
"Position",
"The Tom 'n Jerry Show",
++g_slider_position
);
Учитывая отредактированный код, я бы проверил, правильно ли OpenCV считывает количество кадров из вашего файла. Посмотрите в главе 2 «Изучения» OpenCV, пример 2.3, метод для общего получения количества кадров из вашего AVI (если это то, что вы используете).
В приведенном выше коде, если количество кадров равно 0, трекбар не создается, но код все еще входит в цикл, который пытается обновить позицию трекбара (если он находит кадр). Я бы использовал это вместо:
if (frames != 0)
{
cvCreateTrackbar(
"Position",
"The Tom 'n Jerry Show",
&g_slider_position,
frames,
onTrackbarSlide
);
}
else
{
exit(1);
}