看板 C_and_CPP 關於我們 聯絡資訊
最近想藉由opencv的影像擷取函式庫來擷取USB camera輸出每個不重複的frame 查了opencv doc相關章節描述如下 virtual bool cv::VideoCapture::read(OutputArray image) Grabs, decodes and returns the next video frame. Parameters [out] image the video frame is returned here. If no frames has been grabbed the image will be empty. Returns false if no frames has been grabbed 原本以為以read的方式也是frame base 去polling (從frame buffer抓完一個frame後就從buffer清掉該frame 下一次polling會抓到下個frame) 預期當我把camera關掉並停止輸出frame後,read應該要抓到empty image 但實際上用image.empty()去檢查抓到的image都不是empty 如此一來用polling的方式擷圖就會擷到重覆的frame 我看網路上其他範例也都是使用方法也都是由cpature.read方式不斷polling frame 想請問opencv是否有辦法藉由callback方式擷取影像 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.93.200 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1683014095.A.7C8.html
firejox: 你對 frame buffer 是不是有什麼誤解 05/03 07:53
colddieyou: 有什麼誤解的話還請賜教QQ 05/03 11:25
firejox: frame buffer 就是完整一塊,你能不能抓到新的 frame 是 05/03 12:23
firejox: 要看硬體同步的情形。攝影機會決定 frame 是否更新,不 05/03 12:23
firejox: 是由 polling 決定。 05/03 12:23
colddieyou: 我說法可能讓你誤會,我的意思是函式定義是抓下一張 05/03 13:13
colddieyou: frame,所以我預期他抓完應該會跳下一張,假如我已經 05/03 13:14
colddieyou: 假如我把輸入源關掉,那應該下一次抓就要是empty 05/03 13:15
colddieyou: 但實驗結果是opencv沒有對frame buffer已經處理過的 05/03 13:16
colddieyou: frame做清除動作,這樣用polling的方式就會抓到重複的 05/03 13:17
colddieyou: 這樣opencv用polling方式就沒辦法達成目的 05/03 13:18
colddieyou: 所以我才上來詢問是否有其他作法可以達成目標 05/03 13:19
lycantrope: grab後retrieve? 05/03 20:45
colddieyou: read就包含grab+retrieve,不過我也試過單純polling 05/03 22:25
colddieyou: bool ret=grab()但當輸入源關掉後,always ret==true 05/03 22:28
firejox: 你怎麼關輸入源的 05/03 23:29
colddieyou: 直接拔線 05/04 10:54
colddieyou: 將輸入端的HDMI線直接拔除 05/04 10:56