[问题] opencv如何以callback方式撷取影像

楼主: colddieyou (隐藏)   2023-05-02 15:54:53
最近想借由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方式撷取影像
作者: firejox (Tangent)   2023-05-03 07:53:00
你对 frame buffer 是不是有什么误解
楼主: colddieyou (隐藏)   2023-05-03 11:25:00
有什么误解的话还请赐教QQ
作者: firejox (Tangent)   2023-05-03 12:23:00
frame buffer 就是完整一块,你能不能抓到新的 frame 是要看硬件同步的情形。摄影机会决定 frame 是否更新,不是由 polling 决定。
楼主: colddieyou (隐藏)   2023-05-03 13:13:00
我说法可能让你误会,我的意思是函式定义是抓下一张frame,所以我预期他抓完应该会跳下一张,假如我已经假如我把输入源关掉,那应该下一次抓就要是empty但实验结果是opencv没有对frame buffer已经处理过的frame做清除动作,这样用polling的方式就会抓到重复的这样opencv用polling方式就没办法达成目的所以我才上来询问是否有其他作法可以达成目标
作者: lycantrope (阿宽)   2023-05-03 20:45:00
grab后retrieve?
楼主: colddieyou (隐藏)   2023-05-03 22:25:00
read就包含grab+retrieve,不过我也试过单纯pollingbool ret=grab()但当输入源关掉后,always ret==true
作者: firejox (Tangent)   2023-05-03 23:29:00
你怎么关输入源的
楼主: colddieyou (隐藏)   2023-05-04 10:54:00
直接拔线将输入端的HDMI线直接拔除
作者: lycantrope (阿宽)   2023-05-04 14:20:00

Links booklink

Contact Us: admin [ a t ] ucptt.com