我有一个应用程序,它可以进行相机预览,对每一帧执行一些基本的图像处理功能(例如边缘检测,颜色变化,图像扭曲等),并将修改后的帧显示在屏幕上“即时的”。类似于Android Market中的“Paper Camera”应用程序。Android:实时图像处理
我的方法的总结:
1:创建一个的FrameLayout两个重叠的次数:
甲SurfaceView传递给Camera.setPreviewDisplay()。 (传递null会阻止在某些设备上启动摄像头预览 - 在Android 4.0之前,opencv会使用它来执行此操作)。
一个名为“LiveView”的类,它扩展了View并实现了Camera.PreviewCallBack。该视图从相机接收帧,并在修改后显示帧(例如边缘检测)。该视图位于SurfaceView的顶部。
2:我请Camera.setPreviewCallbackWithBuffer(),使得帧被发送到我的实时查看
3:)的实时查看的在onPreviewFrame(我走捕获的帧(字节[])从YUV转换为RGB,并执行图像处理功能,并调用postInvalidate()(的YUV2RGB转换和图像处理是在本机代码执行)
4:在实时查看的的OnDraw()方法,创建一个从修改的RGB帧(byte [])中获取位图,并将该位图绘制到画布。
此作品(5fps的和在各种设备之间10fps的),但我想听听别人怎么接触过这个问题,如何可以改善。特别是:
- 我会通过扩展GLSurfaceView而不是View来创建LiveView类来获得任何性能吗?
- 这听起来非常低效,因为每个框架都要更新两个曲面。有其他选择吗?
- 要更有效地做到这一点,我应该在本机级别访问摄像机吗? - 我相信OpenCV采用这种方法?
非常感谢