我正在用OpenCV處理幀。事情是這樣的:第二遍OpenCV幀數據爲零
VideoCapture cap(pathC);
while(true) {
cap >> cur;
if(cur.data == NULL) {
break;
}
// do something with cur
}
時循環結束,我需要再次處理所有幀,所以我有另一個循環正是這樣一個,但首先我必須定位在第一幀的視頻。事情是這樣的:
// I have tried all these methods to put cap on frame 0
// cap.set(CV_CAP_PROP_POS_AVI_RATIO, 0);
cap.set(CV_CAP_PROP_POS_FRAMES, 0);
// cap.set(CV_CAP_PROP_POS_MSEC, 0);
// in theory the video is on frame 0 now, do the loop
while(true) {
cap >> cur;
if(cur.data == NULL) {
break;
}
// do something with cur
}
問題是cur.data
在這第二個循環是nil
。
印刷CUR就這兩種情況下安慰給了我這個
第一循環
{
1124024336
2
1072
1920
0x04390010
0x04973810
0x04390010
0x04973810
0x04973810
<nil>
{
0x27d33dac
}
{
0x27d33dd4
([0] = 5760, [1] = 3)
}
}
第二循環
{
1124024336
2
<nil>
1920
<nil>
<nil>
<nil>
<nil>
<nil>
<nil>
{
0x27d33dac
}
{
0x27d33dd4
([0] = 5760, [1] = 3)
}
}
那麼,什麼是錯與對的對象第二遍。它似乎失去了很多東西。
任何線索?
這就是我所做的工作,但我試圖找到一個不那麼蹩腳的解決方案,並且因爲重新讀取文件的開銷。無論如何,它的工作。感謝: – SpaceDog 2014-08-31 07:36:19
:)很高興它幫助。如果它有效,你可以作爲答覆upvote/accept,它會幫助其他人知道答案的有效性。同樣,set函數也有類似的開銷,比如打開視頻,無論如何,除非您保存或存儲幀,否則您必須重新讀取幀。如果您不處理蒸汽視頻,這是最好的解決方案,因爲您不必存儲或保存幀。 – 2014-08-31 08:13:42
我必須測試另一個答案。你的並不是一個完全解決方案,而是一個破解。無論如何,如果沒有真正的解決方案,我會接受你的。 :) – SpaceDog 2014-08-31 08:20:27