CvCaptureFromAVI问题 - OpenCV Android

时间:2013-01-24 09:12:45

标签: android c opencv android-ndk java-native-interface

我需要逐帧捕获存储在Android设备的SD卡中的视频(在本例中为我的模拟器)。我通过NDK使用Android和OpenCV。我通过DDBS(eclipse)的文件浏览器在sdcard中手动推送文件“SinglePerson.avi”,我使用下面的代码来读取文件:

    JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial4_Sample4Mixed_VideoProcessing(JNIEnv*, jobject)
{
    LOGI("INSIDE VideoProcessing ");

    CvCapture* capture = cvCaptureFromAVI("/mnt/sdcard/SinglePerson.avi");

    IplImage* img = 0;

    if(!cvGrabFrame(capture)){              // capture a frame
        LOGI("Inside the if");
        printf("Could not grab a frame\n\7");
        exit(0);
    }
    img=cvRetrieveFrame(capture);// retrieve the captured frame
    cvReleaseCapture(&capture);

}

问题是cvGrabFrame(捕获)结果总是错误的。 有任何建议正确打开视频并抓住帧吗? 提前致谢

2 个答案:

答案 0 :(得分:0)

某些版本的OpenCV(在opencv2包中)构建时没有视频支持。如果是你的情况,你必须在pkg的Makefile中启用“-D WITH_FFMPEG = ON”并重新编译。

查看"Displaying AVI Video using OpenCV"教程:

“您可能需要确保已成功安装ffmpeg,以便允许以不同格式进行视频编码和视频解码。没有ffmpeg功能可能会在尝试运行此简单示例时产生问题并产生编译错误”。

同时检查cvCaptureFromAVI中的路径是否正确。

希望这会有所帮助!

答案 1 :(得分:0)

您正在观察的行为可能是由于cvCaptureFromAVI()失败。你需要安全地开始编码并检查你所做的电话的回复:

CvCapture* capture = cvCaptureFromAVI("/mnt/sdcard/SinglePerson.avi");
if (!capture)
{
    printf("!!! Failed to open video\n\7");
    exit(0);
}

此功能通常因以下两个原因失败:

  • 当它无法访问该文件时(由于文件系统权限错误);
  • 系统上缺少编解码器(或OpenCV不支持视频格式)。

如果您不熟悉OpenCV,我建议您首先在桌面(PC)上测试OpenCV代码。