Используя cvSetCaptureProperty (), вы можете переключаться между кадрами, в миллисекундах или по порядковому номеру кадра.
int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
property_id - это свойство, которое вам необходимо использовать. Может быть одним из следующих:
- CV_CAP_PROP_POS_MSEC - позиция в миллисекундах от начала файла
- CV_CAP_PROP_POS_FRAMES - позиция в кадрах
- CV_CAP_PROP_POS_AVI_RATIO - позиция в относительных единицах (0 - начало файла, 1 - конец файла)
- CV_CAP_PROP_FRAME_WIDTH - ширина кадров в видеопотоке (только для камер)
- CV_CAP_PROP_FRAME_HEIGHT - высота кадров в видеопотоке (только для камер)
- CV_CAP_PROP_FPS - частота кадров (только для камер)
- CV_CAP_PROP_FOURCC - 4-символьный код кодека (только для камер).
Первые два вас интересуют.
РЕДАКТИРОВАТЬ: подробнее:)
Вы можете переключаться между кадрами, просто многократно вызывая упомянутую функцию с различными индексами кадров.
cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, frameIndex);
* +1034 * Пример: * * одна тысяча тридцать пять
IplImage* frame;
CvCapture* capture = cvCreateFileCapture("test.avi");
/* iterate through first 10 frames */
for (int i = 0; i < 10; i++)
{
/* set pointer to frame index i */
cvSetCaptureProperty(capture, CV_CAP_POS_FRAMES, i);
/* capture the frame and do sth with it */
frame = cvQueryFrame(capture);
}
Вы можете добавить аналогичный код для выполнения каждый раз, когда пользователь нажимает кнопку для перемотки видео вперед или назад.
Метод C ++ (OpenCV 2 и выше) будет использовать этот метод вместо того же значения свойства_id и значения.
bool VideoCapture::set(int property_id, double value)