2014-03-13 46 views
0

我正在寫一個邏輯來檢索opencv C++中的視頻的每個第3幀,同時執行我在第一個for循環中遇到問題時嘗試打印(cout )「i」值輸出僅高達687,之後出現「錯誤:內存不足(分配失敗2764804字節)內存不足」錯誤。從opencv C++中的視頻文件中檢索每個第3幀

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,並請讓我知道是否有任何其他邏輯存在從視頻檢索每3幀,這樣我就可以搬出這個概率的,解決這個問題肯定是可觀的。提前致謝。

+0

你想緩存1000個圖像的2.7 MB內存?爲什麼?你實際上想要用每一個第三幀來做什麼? – berak

回答

3

您可以使用CV_CAP_PROP_POS_FRAMES宏來設置接下來要解碼/捕獲的幀位置。

一樣,

VideoCapture::set(CV_CAP_PROP_POS_FRAMES ,framePosition); 

OpenCV Doc更多細節

+0

嗨哈里斯感謝fa回答如此之快,你的意思是我需要使用「視頻捕捉::設置(int propId,double值)」功能來檢索每個第3幀。通過做的例子:VideoCapture :: set(CV_CAP_PROP_POS_FRAMES,3),這將工作,對吧?好心糾正我,如果我worng.thanks再次。 – Santhosh

+0

閱讀完畢後跳過幀或者使用上面的方法,我上面沒有測試過自己試試。 – Haris