如何在 Android Native C++ 中使用 cv::VideoCapture 打开摄像头

问题描述 投票:0回答:1

我尝试使用适用于 Android 的 OpenCV v4.9.0 在 Android Native C++ 中打开相机,但在尝试不同的索引和 api 组合后失败。当尝试 cv::CAP_ANDROID 时,我收到此错误

[ WARN:[email protected]] global cap.cpp:344 open VIDEOIO(ANDROID_NATIVE): backend is generally available but can't be used to capture by index

不确定是什么原因导致失败。该代码在禁用 SE 的 root Android 13 设备上运行,所以我猜它与 permissoin 无关。下面是我的代码:

cv::VideoCapture cap;
int index = 0; //also tried 1, 32 and 33. The device has a camera module and can see video0, video1, video32 and video33 under/dev
int api = cv::CAP_ANDROID; //also tried cv::CAP_V4L2 and cv::CAP_ANY
cap.open(index, api);
if (!cap.isOpenend())
{
  //handle errors
}
android c++ opencv android-ndk
1个回答
0
投票

经过一番挖掘,我发现这个问题可能是由于 Android 的预构建 OpenCV 4.9.0 共享库中缺乏 NDK Camera 支持所致。我最终从源代码构建了该库并在我的 C++ 代码中使用它。现在

cap.open(0, cv::CAP_ANDROID);
返回 OK。我遇到了另一个问题
cap >> frame
总是返回空帧,我仍在研究这个问题。但从未能打开相机来看已经是一个进步了

© www.soinside.com 2019 - 2024. All rights reserved.