android - 将 OpenCV 图像(或位图)从服务发送到 Activity (SurfaceView)

标签 android opencv service android-activity surfaceview

我正在开发一个 Android 应用程序,它安装了一个服务,可以做一些 持续且昂贵的处理(它利用 OpenCV 抓取相机图像 并对其进行一些处理)。我希望我的 Activity 连接和断开连接 从服务在设备上做其他事情并查看处理 (主要用于调试,但我也可以看到其他用例)。

问题是我不确定如何设计这个应用程序——我对 Android 编程也很陌生。

因为它是一个性能关键的应用程序,我想我不能从中传递位图 Activity 的服务,所以我想我想将 SurfaceView 耦合到 Activity 到达前台后立即服务。

类似下面的内容 - 注意:它不是一个完整的示例,它只是显示流程

public class MainActivity extends Activity {
    private OpenCVCameraService mService;
    private SurfaceView mSurfaceView;
    @Override
    public void onCreate() {
        // show UI
        // start mService with mSurfaceView
    }
}

public class OpenCVCameraService extends Service {
    private Processing mProcessing;
    private SurfaceView mSurfaceView;
    @Override
    public void onCreate() {
        // setup OpenCV camera stuff
        // init mProcessing with mSurfaceView
    }
}

public class Processing extends Thread {
    private VideoCapture mCamera;
    private SurfaceView mSurfaceView;   // maybe just the SurfaceHolder
    Processing(VideoCapture camera, SurfaceView surfaceView) {
        mCamera = camera;
        mSurfaceView = surfaceView;
    }
    @Override
    public void run() {
        mCamera.grab();
        mCamera.retrieve(...);
        // process retrieved images
        // image to bitmap
        // What now, how to get bitmap to MainActivity? Passing using intent is a performace hit I guess
        // maybe something like if (mSurfaceView != null) { Canvas canvas = mSurfaceView.lockSurface(); ... }
    }
}

您将如何设计这样的应用程序?还有什么我需要考虑的吗?

最佳答案

好的,我是这样做的:我在 MainActivity 的 onServiceConnected/onServiceDisconnected 中将 SurfaceView 设置为正确的 View (如果应用程序正在运行),如果没有(即暂停)则设置为 null。在服务中,我检查 View 是否存在。这不是最好的解耦,但它确实有效,据我所知,性能还不错。

关于android - 将 OpenCV 图像(或位图)从服务发送到 Activity (SurfaceView),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075666/

相关文章:

c++ - 行的opencv轮廓

service - 在服务类中重定向?

java - Android 服务的方法在不同的线程中调用。它仍然在主线程上运行吗?

android - 开始学习 OpenGL ES。绘制四边形

android - Facebook 不显示好友列表

Android删除记录SQLite

Android 在 Activity 结束时使用服务保存数据

ScrollView 中的 Android 可触摸项目

python - cv2.VideoWriter 问题

java - 从 JNI 共享库访问其他库 - 是否允许?