c – cvQueryFrame是否预先为帧提供缓冲区?
如果我做:
while(1) { //retrieve image from the camera webCamImage=cvQueryFrame(camera) // where 'camera' is cvCreateCameraCapture(0) //do some heavy processing on the image that may take around half a second funcA() } 现在,当我进行连续迭代时,似乎webCamImage落后了! 即使我移动相机,webCamImage也需要很长时间才能更新到新的视野,并且它会一直显示和处理以前的视野相机帧. 我假设cvQuery有一些缓冲区来检索帧. 你能告诉我如何在每次迭代时获得更新的摄像机视图吗? 非常感谢 解决方法
cvQueryFrame只是一个包装器,它调用另外两个函数:cvGrabFrame,它可以非常快速地从摄像机获取数据,以及cvRetrieveFrame,它解压缩这些数据并将其放入IplImage中.如果您需要立即捕获帧,只需抓住帧,然后检索它以便稍后处理.
见http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_highgui.htm FMI 尽管如此,我使用cvQueryFrame和一个典型的网络摄像头,我可以毫不费力地获得每秒几十帧.任何滞后的部分实际上都在你的funcA()调用中的可能性?编辑:从你的代码中的注释,我看到funcA()确实是缓慢的部分.如果执行需要半秒钟,你将每半秒从cvQUeryFrame获得一个新帧,就像你描述的那样.尝试更快地制作funcA,或者将其放在单独的线程中. 作为友情提醒,用户不应修改或删除cvQueryFrame / cvRetrieveFrame返回的IplImage;它是OpenCV用于存储内容的内部系统的一部分,如果你正在做任何有趣的事情,你应该复制一份.我不知道你是否已经这样做了,但是当我开始时我当然做错了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |