在opencv c ++中从视频文件中检索每第3帧

时间:2014-03-13 09:58:34

标签: c++ opencv video-capture frames mat

我正在编写一个逻辑来检测opencv c ++中视频中的每个第3帧,而执行时我在第一个“for”循环中遇到问题,当我尝试打印(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;
}
} 

建议我如何访问超过687的Mat变量数组,并且如果存在从视频中检索每个第3帧的任何其他逻辑,请告诉我,以便我可以摆脱这个概率,解决这个问题是当然可以理解。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用CV_CAP_PROP_POS_FRAMES宏来设置要在下一次解码/捕获的帧位置。

像,

VideoCapture::set(CV_CAP_PROP_POS_FRAMES ,framePosition);

有关详细信息,请参阅OpenCV Doc