我正在使用C++和opencv在linux上編碼。我發現了this類似的問題;雖然,我不能完全實現它的工作。從視頻文件的墊陣列 - opencv
我想要做的是讀取一個視頻文件,並在數組中存儲一定數量的幀。在這個數字上,我想刪除第一幀並將最近的幀添加到數組的末尾。
這是我的代碼到目前爲止。
VideoCapture cap("Video.mp4");
int width = 2;
int height = 2;
Rect roi = Rect(100, 100, width, height);
vector<Mat> matArray;
int numberFrames = 6;
int currentFrameNumber = 0;
for (;;){
cap >> cameraInput;
cameraInput(roi).copyTo(finalOutputImage);
if(currentFrameNumber < numberFrames){
matArray.push_back(finalOutputImage);
}else if(currentFrameNumber <= numberFrames){
for(int i=0;i<matArray.size()-1; i++){
swap(matArray[i], matArray[i+1]);
}
matArray.pop_back();
matArray.push_back(finalOutputImage);
}
currentFrameNumber++;
}
我對墊子的理解說這可能是指針問題;我只是不知道如何解決它。當我查看墊子陣列時,每個元素都是同一個框架。謝謝。
如果你想使用數組來存儲'numberFrames'最後一幀,爲什麼你要使用'} else if(currentFrameNumber <= numberFrames){'?如果'currentFrameNumber> numberFrames'會阻止任何事情發生,這將會發生得非常快。所以我會說,無論視頻有多長時間,你只是存儲第1-6幀(不包括0)。 – Pafka 2014-10-16 19:32:49
Mat只是一個智能指針,你從捕獲得到的東西指向* static *內存。你想要的是:'matArray.push_back(finalOutputImage.clone());' – berak 2014-10-16 20:07:41
@Pafka謝謝你指出我的錯字。它應該是一個超過標誌。仍然沒有解決這個問題,但是貝拉克說的確如此。 – tierratheseeress 2014-10-17 20:45:03