【发布时间】:2015-08-07 01:15:42
【问题描述】:
我正在使用 OpenCV 为 iPhone 开发视频处理应用程序。
出于性能原因,我不想以相对较低的分辨率处理实时视频。我正在对视频中的每一帧进行对象检测。当在低分辨率视频帧中找到对象时,我需要以更高的分辨率获取完全相同的帧。
我已经能够使用来自 AVFoundation 的 videoDataBufferOutput 和 StillImageOutput 来完成这项工作,但静止图像并不是我需要的确切帧。
有没有什么好的实现方法或关于如何自己实现它的想法?
【问题讨论】:
-
不可能获得完全相同的帧,因为传感器可以在给定时刻捕获静止图像或视频帧。你总会有一些延迟。您可以做的最接近的事情是捕获高分辨率视频,将高分辨率帧保存在内存中,调整它们的大小并以低分辨率进行对象检测,如果找不到对象则删除(高分辨率)帧或使用它如果是的话。
-
@RosaGronchi 感谢您的回复。您知道在发出异步捕获静止图像的信号和实际获取帧之间可能的最小延迟(时间或帧偏移)吗?如果这个延迟足够低,它可能仍然适用于我的目的。我也喜欢你的想法,但我担心存储所有高分辨率帧时的内存问题,因为由于每帧上发生的内存密集型图像处理,我已经降到了 ~8fps。
-
最小延迟取决于手机,通常非常短(iPhone 5 上的 0.25 秒或更短,假设没有闪光灯)。你不需要存储所有的高分辨率帧,你可以只存储你现在正在处理的那些(1-4个,取决于你是使用单个线程还是多个线程)
标签: ios objective-c opencv image-processing avfoundation