我目前正在使用相機/視頻進行Android本機圖像處理。Andriod Studio OpenCV 3.2,無法用本地OpenCV打開視頻文件或安卓相機
我使用OpenCV 3.2來捕獲和處理圖像。
問題是,我無法打開任何種類的視頻源或相機!
這是我的C++代碼。
cv::VideoCapture cap;
cv::Mat frame;
JNIEXPORT void JNICALL
Java_com_project_vmtest_Native_openVideo(JNIEnv *env, jobject instance, jstring fileName) {
const char * fileNameNative;
jboolean isCopy;
fileNameNative = env->GetStringUTFChars(fileName, &isCopy);
cap = cv::VideoCapture(fileNameNative);
cap.open(fileNameNative);
if(cap.isOpened()) // ALWAYS FALSE HERE!!!!
cap.read(frame);
}
JNIEXPORT void JNICALL
Java_com_project_vmtest_Native_render(JNIEnv *env, jclass type) {
if(engine){
cap.read(frame);
if (frame.empty()) return; // ALWAYS RETURNS HERE!!!!
engine->prepare(frame);
engine->renderObjToFBO();
engine->renderFrame();
engine->clearFrameData();
}
}
我檢查fileName
,它似乎是適當的。
即這是我的文件結構:
app\src\main\cpp\native_main.cpp // native code
app\src\main\assets\vmData\test\testFile.mp4 // video file
然後fileName
是:
fileName = "../assets/vmData/test/testFile.mp4"
我」 .. \資產\ vmData \測試\ testFile.mp4" 並沒有什麼改變嘗試。
我試過cap.open(CV_CAP_ANDROID + 0);
抓取相機預覽並得到了相同的結果,VideoCapture
根本不會打開!
我使用下面的代碼啓用了Android攝像頭權限。
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:name="android.hardware.camera.front"/>
<uses-feature android:name="android.hardware.camera.front.autofocus"/>
我的測試設備是Android 5.0 Lollypop,所以我不認爲這是任何類型的權限問題。
掙扎數小時。
任何幫助表示讚賞!
可能相關:https://github.com/headupinclouds/gatherer/issues/19(見最後一項)。更相關:https:// github。com/opencv/opencv/issues/5374#issuecomment-141995879 –
@MorrisonChang我檢查了鏈接,找不到任何有助於我的情況的東西。無論如何感謝您的回覆;) –