使用Android OpenCv逐帧阅读视频

时间:2013-10-29 05:48:25

标签: android opencv video

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

3 个答案:

答案 0 :(得分: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;
}

希望有所帮助。古德勒克

答案 1 :(得分:0)

我不了解Android,但通常您必须使用VideoCapture::open打开视频,然后使用VideoCapture::grab获取下一帧。有关详细信息,请参阅OpenCV的Documentation

答案 2 :(得分:0)

我知道它已经晚了但是如果他需要的话,任何人都可以使用它 所以你可以使用@Pawan Kumar代码,你需要在清单文件中添加读取渗透System.out.println(Arrays.equals(i, i1));//return true same content

你会得到它。