[英]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對象? 任何人都可以向我提供解決方案的一些指示。
您的管道目前是:
你需要做什么[丟失的東西]是將像素渲染到屏幕外的pbuffer並用glReadPixels()
讀回來。 您可以使用Java或本機編寫的代碼執行此操作; 對於前者,您需要將它們讀入“直接”ByteBuffer,以便您可以輕松地從本機代碼訪問像素。 GLES使用的EGL上下文保存在線程本地存儲中,因此在GLSurfaceView呈現線程上運行的本機代碼將能夠訪問它。
這種情況的一個例子可以在bigflake找到ExtractMpegFramesTest ,其不同之處主要在於它是從一個視頻而不是攝像機抓取的幀。
對於API 19+,如果您可以處理YV12或NV21中的幀而不是RGB,則可以將相機送入ImageReader並訪問數據,而無需復制/轉換它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.