从OpenCV C 中的视频文件中检索每三个帧

Retrieving every 3rd frame from video file in opencv c++

本文关键字:三个 检索 OpenCV 的视频 文件      更新时间:2023-10-16

我正在编写一个逻辑,以从OpenCV C 中的视频中检索每个第三帧,而执行时,我在第一个'for'for'for'for print(cout)'for'for(cout)''中'i'value ouput只有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以上的垫子变量阵列,请让我知道是否存在其他逻辑以从视频中检索每个第三帧肯定是可观的。预先感谢。

您可以使用CV_CAP_PROP_POS_FRAMES宏来设置框架位置,以解码/捕获。

喜欢,

VideoCapture::set(CV_CAP_PROP_POS_FRAMES ,framePosition);

有关更多详细信息,请参见OpenCV Doc