Re: [問題] 關於OpenCV的VideoCapture

看板C_and_CPP (C/C++)作者時間15年前 (2011/01/03 18:41), 編輯推噓3(306)
留言9則, 2人參與, 最新討論串2/2 (看更多)
我思考了一下holydc大大的說法 我把程式改成while迴圈 while(true) { if(cap.grab()) { Mat frame; cap >> frame; imshow("gray", frame); f++; printf("%d\n",f); if(waitKey(30) >= 0) break; } else { break; } } 神奇的事情發生了 f只能跑到111 剛好是沒改之前的一半(223) 不過還是還是跳出一樣的錯誤 影片長度7秒 30fps 也差不多是兩百多個frames 可能真如hloydc說的 已經跑完了 但改成上面的又只能跑一半!! why? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.13.168

01/03 21:02, , 1F
grab() 跟 operator>> 都是在讀畫面吧
01/03 21:02, 1F

01/03 21:02, , 2F
所以你這樣變成一個 iteration 讀兩次畫面
01/03 21:02, 2F

01/03 21:06, , 3F
你把 cap>>frame 改成 cap.retrieve(frame) 試試看
01/03 21:06, 3F

01/03 23:32, , 4F
virtual bool grab(); 所以傳回值true/false??
01/03 23:32, 4F

01/03 23:32, , 5F
grap() 實際上會做讀取的動作嗎?
01/03 23:32, 5F
※ 編輯: amidofun 來自: 114.33.55.132 (01/03 23:34)

01/03 23:54, , 6F
我看他reference的說法,grab比較像是移動pointer的動作
01/03 23:54, 6F

01/03 23:55, , 7F
真正取出畫面是 retrieve
01/03 23:55, 7F

01/03 23:56, , 8F
又 operator>> = grab + retrieve
01/03 23:56, 8F

01/03 23:56, , 9F
所以這樣寫變成隔一張 frame 讀取一次
01/03 23:56, 9F
文章代碼(AID): #1D8QV6_E (C_and_CPP)
文章代碼(AID): #1D8QV6_E (C_and_CPP)