使用 Opencv 从 Android 中的 CameraGLSurfaceView 拍照

Posted

技术标签:

【中文标题】使用 Opencv 从 Android 中的 CameraGLSurfaceView 拍照【英文标题】:Take picture from CameraGLSurfaceView in Android with Opencv 【发布时间】:2017-04-29 10:49:23 【问题描述】:

我在android http://docs.opencv.org/trunk/d7/dbd/tutorial_android_ocl_intro.html实现了应用OpenCL的例子

它使用 GLSurfaceView 并在 C++ 中更新来自相机的图像。这 C++代码使用带有glReadPixels的GL库

我的问题是,是否可以使用这种架构拍照(以照片分辨率)?我试图实现camera.takePicture,这是我的错误:

04-28 16:57:18.237   203  9805 E Camera2ClientBase: takePicture: attempt to use a locked camera from a different process (old pid 0, new pid 32146)
--------- beginning of crash
04-28 16:57:18.260 32146 32279 E AndroidRuntime: FATAL EXCEPTION: GLThread 599
04-28 16:57:18.260 32146 32279 E AndroidRuntime: Process: edu.uab.cvc.camera, PID: 32146
04-28 16:57:18.260 32146 32279 E AndroidRuntime: java.lang.RuntimeException: takePicture failed
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at android.hardware.Camera.native_takePicture(Native Method)
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at android.hardware.Camera.takePicture(Camera.java:1434)
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at edu.uab.cvc.camera.MyGLSurfaceView.takePhoto(MyGLSurfaceView.java:165)
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at edu.uab.cvc.camera.MyGLSurfaceView.onCameraTexture(MyGLSurfaceView.java:139)
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at org.opencv.android.CameraGLRendererBase.onDrawFrame(CameraGLRendererBase.java:131)
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1535)
04-28 16:57:18.260 32146 32279 E AndroidRuntime:    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
04-28 16:57:18.276   779  3430 W ActivityManager:   Force finishing activity edu.uab.cvc.camera/.MainActivity

【问题讨论】:

【参考方案1】:

最后,我找到了Camera2 的 Google 示例。 GLSurfaceView 似乎是这个项目的一个实现。我比较了这两个项目,并创建了拍照所需的类。

【讨论】:

以上是关于使用 Opencv 从 Android 中的 CameraGLSurfaceView 拍照的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV,Android:从图像中检测对象而不是实时检测

opencv中的子库

将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

从 onCameraFrame、OpenCV、Android/Java 调用 HoughCircles() 方法时改变慢帧速率

使用 OpenCV 从 android Camera2 将 YUV 转换为 RGB ImageReader 时出现问题,输出图像为灰度

如何在 android 中提高 OpenCV 人脸检测性能?