簡體   English   中英

使用OpenGL處理​​Android相機幀

[英]Android camera frame processing using OpenGL

我正在嘗試在相機預覽幀上應用人臉檢測。 我正在使用OpenGL和OpenCV在運行時處理這些相機幀。

@Override
    public void onDrawFrame(GL10 unused) {
        if (VERBOSE) {
            Log.d(TAG, "onDrawFrame tex=" + mTextureId);
        }

        mSurfaceTexture.updateTexImage();
        mSurfaceTexture.getTransformMatrix(mSTMatrix);

        // TODO: need to implement
        //JniCppManager.processFrame();

        drawFrame(mTextureId, mSTMatrix);
}

我正在嘗試實現processFrame()的c ++實現。 如何從轉換矩陣中獲取c ++中的Mat對象? 任何人都可以向我提供解決方案的一些指示。

您的管道目前是:

  • 相機(生產框架)
  • SurfaceTexture(接收幀,轉換為GLES“外部”紋理)
  • [缺少的東西]
  • 傳遞給C ++的RGB字節數組

你需要做什么[丟失的東西]是將像素渲染到屏幕外的pbuffer並用glReadPixels()讀回來。 您可以使用Java或本機編寫的代碼執行此操作; 對於前者,您需要將它們讀入“直接”ByteBuffer,以便您可以輕松地從本機代碼訪問像素。 GLES使用的EGL上下文保存在線程本地存儲中,因此在GLSurfaceView呈現線程上運行的本機代碼將能夠訪問它。

這種情況的一個例子可以在bigflake找到ExtractMpegFramesTest ,其不同之處主要在於它是從一個視頻而不是攝像機抓取的幀。

對於API 19+,如果您可以處理YV12或NV21中的幀而不是RGB,則可以將相機送入ImageReader並訪問數據,而無需復制/轉換它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM