2

我有一组视频存储在 android 文件系统的一个文件夹中。我想逐帧读取每一帧,以便我可以对它们执行一些 OpenCv 函数,然后将它们显示在位图中。我不知道如何正确地做到这一点,任何帮助将不胜感激。

4

3 回答 3

6

你可以看看Javacv

“JavaCV 首先为计算机视觉领域研究人员常用的库提供了封装:OpenCV、FFmpeg、libdc1394、PGR FlyCapture、OpenKinect、videoInput 和 ARToolKitPlus”

要逐帧阅读,您必须执行以下操作

FrameGrabber videoGrabber = new FFmpegFrameGrabber(videoFilePath);

try 
{
    videoGrabber.setFormat("video format goes here");//mp4 for example
    videoGrabber.start();    
} catch (com.googlecode.javacv.FrameGrabber.Exception e) 
{           
    Log.e("javacv", "Failed to start grabber" + e);     
    return -1;  
}

Frame vFrame = null;

do
{
    try
    {
        vFrame = videoGrabber.grabFrame();
        if(vFrame != null)
            //do your magic here
    } catch (com.googlecode.javacv.FrameGrabber.Exception e) 
    {
        Log.e("javacv", "video grabFrame failed: "+ e);
    }
}while(vFrame != null);

try 
{
    videoGrabber.stop();
}catch (com.googlecode.javacv.FrameGrabber.Exception e) 
{
    Log.e("javacv", "failed to stop video grabber", e);
    return -1;
}

希望有帮助。祝你好运

于 2013-10-29T07:42:20.537 回答
0

我不了解Android,但通常您必须使用它VideoCapture::open来打开视频,然后使用它VideoCapture::grab来获取下一帧。有关这方面的更多信息,请参阅OpenCV文档

更新

目前似乎 Android 不支持相机访问,请在 OpenCV Github 上查看此问题:https ://github.com/opencv/opencv/issues/11952

您可以尝试问题中链接的非官方分支:https ://github.com/komakai/opencv/tree/android-ndk-camera

或使用另一个库来读取帧,然后从数据缓冲区中创建一个 OpenCV 图像,就像在这个问题中一样。

于 2013-10-29T07:35:44.993 回答
0

我知道为时已晚,但任何人都可以在需要时使用它,因此您可以使用@Pawan Kumar 代码,并且您需要在清单文件中添加读取权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

你会得到它的工作。

于 2016-09-19T00:38:42.823 回答