无法在 android 上使用 C++ OpenCV 打开相机

Posted

技术标签:

【中文标题】无法在 android 上使用 C++ OpenCV 打开相机【英文标题】:Can't open camera using C++ OpenCV on android 【发布时间】:2018-03-06 19:25:39 【问题描述】:

我正在尝试将一个非常简单的 OpenCV 应用程序迁移到 android。该代码尝试从与使用 C# 和 Xamarin 的主应用程序链接的 C++ .so 库访问相机,我怀疑这与我的问题有关。我的 C++ 代码只是尝试使用 cv::VideoCapture 访问摄像头,如下所示:

    cv::VideoCapture cap(0); //default camera

    if(!cap.isOpened())
    
        LOGE("No camera detected on this system\n");
    

尽管我像这样在 AndroidManifest.xml 中指定了权限,但这总是失败:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.XamarinARapp">
  <uses-sdk android:minSdkVersion="15" />
  <application android:label="XamarinARapp.Android">
  </application>
  <uses-permission android:name="android.permission.CAMERA"/>
  <uses-feature android:name="android.hardware.camera" android:required="false"/>
  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
  <uses-feature android:name="android.hardware.camera.front" android:required="false"/>
  <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
</manifest>

有没有人在 C++ 中使用 cv::VideoCapture 成功访问了安卓相机? Xamarin 跟它有关系吗?

【问题讨论】:

您在哪个 Android API 版本上进行测试?即,您是否在代码中为 API 级别 23+ 设备请求了运行时摄像头权限? 我正在 android 8.0 Nexus 5X 上进行测试,但该应用正在为 android 4.4 构建 我看到了一分钟。清单中列出的目标 API.... 目标呢? 【参考方案1】:

但该应用是为 android 4.4 构建的

您的清单 SDK 版本应如下所示:

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="19" />

否则,如果没有 targetSdkVersion 设置并在 API 23+ 设备上运行,您将需要请求运行时相机权限。

【讨论】:

我修改了我的代码以使用 Xamarin Plugin.Permissions 请求运行时相机权限,并且权限肯定被授予,但问题仍然存在。将 minSdkVersion 和 targetSdkVersion 都更改为 24

以上是关于无法在 android 上使用 C++ OpenCV 打开相机的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上重新启动 Qt 或 c++ 中的程序?

无法在Android上使用C ++ OpenCV打开相机

Android使用JNI,C++调用JAVA代码,能找到JAVA的函数无法调用?

无法在 GeForce 540M 上运行 CUDA 或 OpenCL

无法在 android native c++ 中使用自定义类对象的向量

使用 jni 将位图从 android 相机传递到 C++