【问题标题】:Splitting cameracontrol sample OpenCv4Android in two threads在两个线程中拆分 cameracontrol 示例 OpenCv4Android
【发布时间】:2013-06-06 11:45:46
【问题描述】:

我已将 OpenCv4Android 版本的示例导入 Eclipse Juno。 2.4.5,称为“cameracontrol”。可以在这里找到:Camera Control OpenCv4Android Sample

现在我想用这个项目作为我的基础。我想用图像处理技术处理每一帧,所以,为了提高性能,我想把项目的主要活动分成两个类:一个只是活动,一个(线程)负责预习。

我该怎么办?有没有这方面的例子?

【问题讨论】:

    标签: android multithreading opencv android-camera


    【解决方案1】:

    这可能不是一个完整的答案,因为我目前只是自己了解这个问题,但我会提供尽可能多的信息。

    您可能必须自己从相机中抓取图像并将其分派给线程。这是因为您在示例中的活动被来自相机的帧调用,并且必须返回要显示的帧(立即)作为返回值。如果同时不显示空白屏幕或其他一些骇人听闻的东西,您就无法并行处理 2+ 帧。您可能希望在某处分配一个(固定大小的)缓冲区,然后在获得一个(这将是调度程序)时使用工作线程开始处理一个帧。一旦您的工作线程完成,他就会通知将图像提供给视图的调度程序。如果在所有工作线程都忙(即缓冲区中没有空闲插槽)时来自相机的帧,则丢弃该帧。一旦缓冲区中的空间再次释放,就会接受并处理下一帧。

    您可以查看JavaCameraViewNativeCameraViewinitialitzeCamera 函数的代码以了解如何执行此操作(谷歌也应该提供帮助,因为没有OpenCV 的应用程序必须这样做好吧)。对我来说,原生相机的性能要好得多(即使没有繁重的处理,它也更加流畅),但是 ymmv...

    我无法提供有关实施的实际细节,因为我自己还没有那么深入。我觉得这提供了一些想法。

    【讨论】:

    • 感谢您的回答。事实上,我的目标是捕获帧,用工作线程将它们保存到缓冲区中,并且在后台应该有另一个正在运行的线程从缓冲区中获取帧,以便使用图像处理技术对其进行处理。你说的很清楚,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多