使用 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:从图像中检测对象而不是实时检测
将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法
从 onCameraFrame、OpenCV、Android/Java 调用 HoughCircles() 方法时改变慢帧速率
使用 OpenCV 从 android Camera2 将 YUV 转换为 RGB ImageReader 时出现问题,输出图像为灰度