无法在 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使用JNI,C++调用JAVA代码,能找到JAVA的函数无法调用?
无法在 GeForce 540M 上运行 CUDA 或 OpenCL