Извлечение каждого 3-го кадра из видеофайла в opencv Stack Overflow

Я пишу логику для извлечения каждого 3-го кадра из видео в opencv c ++, при выполнении я сталкиваюсь с проблемой в первом цикле ‘for’, когда я пытаюсь print (cout) ‘i’ значение выходного значения составляет только до 687, после чего Ошибка «Ошибка: недостаточно памяти (не удалось выделить 2764804 байта) из-за недостатка памяти».

int main(){

string path = "C:/vid_frames/Highway_Hamilton.avi";
VideoCapture capture(path);

Mat matImage[1000];cout<<"initalization done";

//obtaining frames from the video into matimage variable

for(int i=0;i<1000;i++) {

char filename[30]="Existing frame";

capture >> matImage[i];

cout<<"i:"<<i;

if ( matImage[i].empty())
{
cout << "Cannot load image!,runnig application might abort exit,press any key:" << endl;
getchar();
}

char frame_id[30];
itoa(i, frame_id, 15);
strcat(filename, frame_id);
}

int num=0;

for(int i=0;num<1000;i++) {

char filename[30]="Required frame";

char frame_id[30];
itoa(num, frame_id, 10);
strcat(filename, frame_id);

num=num+3;
}
}

предложите мне, как я могу получить доступ к массиву переменных Mat за пределами 687, и любезно сообщите мне, существует ли какая-либо другая логика для извлечения каждого 3-го кадра из видео, чтобы я мог выйти из этой проблемы, решение этой проблемы, несомненно, является заметным. заранее спасибо.

0

Решение

Ты можешь использовать CV_CAP_PROP_POS_FRAMES макрос для установки положения кадра, который будет декодирован / захвачен следующим.

Подобно,

VideoCapture::set(CV_CAP_PROP_POS_FRAMES ,framePosition);

Увидеть OpenCV Doc Больше подробностей

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]