nette
nette

Reputation: 575

Reading a video frame by frame with Android OpenCv

I have a set of videos stored in a folder on the android file system. I would like to read each frame by frame so that i can perform some OpenCv functions on them and then display them in a Bitmap. I'm not sure how to do this correctly, any help would be appreciated.

Upvotes: 2

Views: 8674

Answers (3)

Mailerdaimon
Mailerdaimon

Reputation: 6080

I don´t know about Android but generally you would have to use VideoCapture::open to open your video and then use VideoCapture::grab to get the next frame. See the Documentation of OpenCV for more information on this.

Update:

It seems like camera access is not officially supported for Android at the moment, see this issue on the OpenCV Github: https://github.com/opencv/opencv/issues/11952

You can either try the unofficial branch linked in the issue: https://github.com/komakai/opencv/tree/android-ndk-camera

or use another library to read in the frames and then create an OpenCV image from the data buffer like in this question.

Upvotes: 0

lafi raed
lafi raed

Reputation: 113

i know it's to late but any one can use it if he need it so you can use @Pawan Kumar code and you need to add read permession to your manifest file <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

and you will get it working.

Upvotes: 0

Pawan Kumar
Pawan Kumar

Reputation: 273

You can take a look at Javacv.

"JavaCV first provides wrappers to commonly used libraries by researchers in the field of computer vision: OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, videoInput, and ARToolKitPlus"

To read each frame by frame you'd have to do something like below

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;
}

Hope that helps. Goodluck

Upvotes: 6

Related Questions