明月笑刀無(wú)情
2023-09-19 14:03:52
我注意到一個(gè)我在文檔中沒(méi)有找到答案的行為。當(dāng)我使用 VideoCapture(0) 從相機(jī)捕獲流時(shí),檢查下面的代碼,我注意到由于我在代碼中放入的延遲,一些幀被跳過(guò)。但是當(dāng)我播放視頻時(shí),它不會(huì)跳過(guò)幀。cap = cv2.VideoCapture(0)#cap = cv2.VideoCapture("awesomevideo.mp4") while True : # Get a new frame from camera retval, frame = cap.read() time.sleep(1) # Display images cv2.imshow("frame", frame)我是否正確理解了這種行為,或者這是我的代碼的問(wèn)題?當(dāng)然,這只是一個(gè)測(cè)試腳本,當(dāng)我處理來(lái)自相機(jī)的流時(shí),我注意到了這個(gè)問(wèn)題,我的 while 循環(huán)將花費(fèi) 0.4 秒,然后它會(huì)抓取下一幀(它會(huì)跳過(guò)中間的一些幀),但是當(dāng)我保存時(shí)同樣的視頻并決定進(jìn)行離線處理,我注意到它不會(huì)跳過(guò)幀,即,它只是等到我處理完幀才給我下一個(gè),不像相機(jī)那樣只抓取相機(jī)現(xiàn)在顯示的任何內(nèi)容。
1 回答

RISEBY
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
您無(wú)法獲得現(xiàn)實(shí)世界中的所有幀。幀速率將是無(wú)限的,這是不可能的。相機(jī)嘗試在捕獲持續(xù)時(shí)間和處理時(shí)間的限制內(nèi)捕獲盡可能多的幀。通過(guò)添加sleep
,您可以增加處理時(shí)間。
錄制的視頻具有來(lái)自現(xiàn)實(shí)世界的離散幀樣本,這足以讓我們感知流,就好像它無(wú)限流動(dòng)一樣。人眼每秒捕獲 24 幀。如果視頻的目的是用于鳥(niǎo)類(lèi),則幀速率應(yīng)至少為 80。
知道了這些,應(yīng)該就清楚為什么VideoCapture
會(huì)像你說(shuō)的那樣了。相機(jī)試圖從現(xiàn)實(shí)世界中捕捉盡可能多的幀。對(duì)于錄制的視頻,您已經(jīng)擁有了所有幀。
作為腳注,出于顯示目的,您應(yīng)該使用 aftercv2.waitKey(1)
而不是time.sleep(1)
after 。
添加回答
舉報(bào)
0/150
提交
取消