如何:Android 带文件的 OpenCV VideoCapture

How To: Android OpenCV VideoCapture with File

我正在尝试将视频传递给 OpenCV VideoCapture class。但是,当我调用 VideoCapture.isOpened() 方法时,它总是 returns false。我尝试了两种方法:

  1. 正在将视频文件保存到内存中,context.getFilesDir() => /data/data/package_name/files/VideoToAnalyze/Recording.mp4

  2. 还有一个到environment.getExternalStorageDirectory() => sdcard/appName/Recording.mp4。

这里似乎没有任何效果。我的问题是如何将视频文件(或正确的文件路径是什么)传递给 VideoCapture OpenCV 对象?我在下面发布了一些代码作为示例。请注意,我没有收到错误。该文件始终是 found/exists,但是当我调用 isOpened() 时,我总是得到 false.

更新: 所以看起来网络上的每个人都在说 OpenCV(我使用的是 3.10)缺少 ffmpeg 后端,因此无法处理视频。我想知道有没有人知道这是事实??有没有解决办法。几乎所有其他逐帧处理视频的替代方法都非常慢。

String x = getApplicationContext().getFilesDir().getAbsolutePath();
File dir = new File(x + "/VideoToAnalyze");
if(dir.isDirectory()) {
       videoFile = new File(dir.getAbsolutePath() + "/Recording1.mp4");
} else {
      // handle error
}

if(videoFile.exits(){

     String absPath = videoFile.getAbsolutePath();
     VideoCapture vc = new VideoCapture();
     try{
           vc.open(absPath);
     } catch (Exception e) {
       /// handle error
     }

     if(!vc.isOpened(){
         // this code is always hit
         Log.v("VideoCapture", "failed");
     } else {
         Log.v("VideoCapture", "opened");


    .....

只是为了关闭这个 .. 我下载了 JavaCV .. 将 .so 文件包含到 android 项目中,然后使用了 FFMPEGFrameGrabber。

这是一个老问题,但我也有同样的问题。

用于 Android 的 Opencv 仅支持 AVI 容器中的 MJPEG 编解码器。 See this