opencv从网络摄像头获取图像并实时处理,你处理的图片‘过期了!
opencv吧
全部回复
仅看楼主
level 2
玉玲兰香 楼主
假如你要写一个人脸识别程序,从摄像头拿图检测其中的人脸,摄像头帧率20(每秒产生20张图),而很不巧的是,你的程序一秒只能处理一张图片(假设),那么问题来了,capture.read()返回的是当前帧的下一帧,你只处理摄像头一秒内产生的20张图,就用了20秒!那么如何解决这个问题?
第一是手动跳帧,在执行识别程序之前手动挑掉19帧(不算跳帧花费的时间的情况下,摄像头产生20张图用了一秒,而你处理了一张图加跳过19张图,也用了一秒,基本同步),但是随即而来问题是,如果我的识别程序有时需要0.5秒,有时需要2秒,那跳帧也不全管用啊。
第二,我从摄像头拿到图,是基于当前时间的最新的一帧,而不是当前帧的下一帧。那么问题来了,怎么才能拿到摄像头产生的最新的图片?
2019年07月01日 07点07分 1
level 2
玉玲兰香 楼主
听说有图会火,求大神指点
2019年07月01日 07点07分 2
level 13
话都说不清楚,两个线程不就搞定了?一个线程读图,一个线程处理,什么时候处理完就去拿一张当前最新的图继续处理。
2019年07月02日 03点07分 3
一个线程读图,一个线程处理,有没有demo可以参考的,我自己写的有问题啊。。。[惊哭]
2020年06月04日 10点06分
@lankybin 这还要啥demo,慢慢debug一下。
2020年06月05日 06点06分
@leehqsunny 我开了两个线程,没法做到获取帧和处理帧两个部分并发执行。。。
2020年06月05日 09点06分
level 11
复制,把摄像头获取得图像,给另一个变量。去处理这个变量就可以。因为变量永远保存最新的
2019年07月02日 10点07分 4
level 1
一个存图像线程就行了。取的时候判断图像是否正在写入,是的话就等待,不是的话直接取出来就好了
2019年07月11日 07点07分 6
level 1
用队列啊
2020年06月23日 02点06分 7
1