如何:Android OpenCV视频捕获与文件

How To: Android OpenCV VideoCapture with File

本文关键字:文件 视频 Android OpenCV 如何      更新时间:2023-10-16

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

  1. 将视频文件保存到内部存储器,context.getFilesDir()=>/data/data/package_name/filess/VideoToAnalyze/Recording.mp4

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

这里似乎什么都不管用。我的问题是如何将视频文件(或正确的文件路径)传递给VideoCapture OpenCV对象?我在下面发布了一些代码作为示例。请注意,我没有收到错误。文件总是被找到/存在,但当我调用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");

    .....

这是一个老问题,但我还是遇到了同样的问题。

Opencv for Android仅支持AVI容器中的MJPEG编解码器。请参阅此

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