亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Cap.read() 是否會跳過相機流中的幀,但從文件運行時不會?

Cap.read() 是否會跳過相機流中的幀,但從文件運行時不會?

明月笑刀無情 2023-09-19 14:03:52
我注意到一個我在文檔中沒有找到答案的行為。當我使用 VideoCapture(0) 從相機捕獲流時,檢查下面的代碼,我注意到由于我在代碼中放入的延遲,一些幀被跳過。但是當我播放視頻時,它不會跳過幀。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)我是否正確理解了這種行為,或者這是我的代碼的問題?當然,這只是一個測試腳本,當我處理來自相機的流時,我注意到了這個問題,我的 while 循環將花費 0.4 秒,然后它會抓取下一幀(它會跳過中間的一些幀),但是當我保存時同樣的視頻并決定進行離線處理,我注意到它不會跳過幀,即,它只是等到我處理完幀才給我下一個,不像相機那樣只抓取相機現在顯示的任何內容。
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

您無法獲得現實世界中的所有幀。幀速率將是無限的,這是不可能的。相機嘗試在捕獲持續時間和處理時間的限制內捕獲盡可能多的幀。通過添加sleep,您可以增加處理時間。

錄制的視頻具有來自現實世界的離散幀樣本,這足以讓我們感知流,就好像它無限流動一樣。人眼每秒捕獲 24 幀。如果視頻的目的是用于鳥類,則幀速率應至少為 80。

知道了這些,應該就清楚為什么VideoCapture會像你說的那樣了。相機試圖從現實世界中捕捉盡可能多的幀。對于錄制的視頻,您已經擁有了所有幀。

作為腳注,出于顯示目的,您應該使用 aftercv2.waitKey(1)而不是time.sleep(1)after 。


查看完整回答
反對 回復 2023-09-19
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號