我有一组视频存储在 android 文件系统的一个文件夹中。我想逐帧读取每一帧,以便我可以对它们执行一些 OpenCv 函数,然后将它们显示在位图中。我不知道如何正确地做到这一点,任何帮助将不胜感激。
3 回答
你可以看看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;
}
希望有帮助。祝你好运
我不了解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 图像,就像在这个问题中一样。
我知道为时已晚,但任何人都可以在需要时使用它,因此您可以使用@Pawan Kumar 代码,并且您需要在清单文件中添加读取权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
你会得到它的工作。