[英]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.