3

我有一个问题:如何在 Android 中加载存储在设备中的视频文件,以及如何将其拆分为帧?我正在使用 IntelliJ,我想将视频分割成帧,以便使用一些图像处理技术(使用 OpenCv for Android 库)来处理它们。

4

2 回答 2

1

您不需要为此使用 OpenCV。您可以使用SDK 提供的MediaMetaDataRetreiver类。它提供了从各种媒体文件中提取元数据的方法。您可以尝试以下方法:

MediaMetadataRetriever retriever = new MediaMetadataRetriever();

retriever.setDataSource(file.getAbsolutePath());

imgView.setImageBitmap(retriever.getFrameAtTime(TIME_OFFSET,MediaMetadataRetriever.OPTION_CLOSEST));

TIME_OFFSET以微秒为单位。

于 2013-09-12T08:20:01.900 回答
0

在 OpenCV 中抓取视频帧非常简单。OpenCV 网站上有很多例子。然而关键是在安卓上设置opencv。您可以按照此链接在 Android 上开始使用 Opencv。

http://opencv.org/android

一旦你在安卓上安装了opencv。您可以轻松地在 Mat 结构中加载视频文件和抓取帧,然后对其进行一些处理。

这是示例之一。它需要一些修改才能在安卓上运行它。我认为您需要为此在 andriod 上使用 NDK。

int main(int argc, char*argv[])
{

    char *my_file = "C:\\vid_an2\\desp_me.avi";
    std::cout<<"Video File "<<my_file<<std::endl;
    cv::VideoCapture input_video;

    if(input_video.open(my_file))
    {
         std::cout<<"Video file open "<<std::endl;
    }
    else
    {
        std::cout<<"Not able to Video file open "<<std::endl;

    }
    namedWindow("My_Win",1);
    namedWindow("Segemented", 1);
    Mat cap_img;
    for(;;)
    {
         input_video >> cap_img;
         imshow("My_Win", cap_img);
          waitKey(0);
    }
   return 0;
 }
于 2013-09-12T08:18:36.750 回答