CvCaptureFromAVI问题 - OpenCV的机器人机器人、问题、CvCaptureFromAVI、OpenCV

2023-09-07 12:53:38 作者:却词不达意.

我需要捕获帧由从存储在我的sd Android设备的卡的视频帧(在这种情况下我的仿真器)。我通过NDK使用Android和OpenCV的。我手动推SD卡内的文件SinglePerson.avi通过DDBS(日蚀)的文件浏览器,我用下面的code来读取文件:

I need to capture frame by frame from a video stored in my sd card of the Android device (in this case my emulator). I am using Android and OpenCV through NDK. I pushed manually the file "SinglePerson.avi" inside the sdcard through file explorer of DDBS (eclipse) and I used the code below to read the file:

    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(捕获)的结果始终为false。 任何建议正确地打开视频和抢框架? 在此先感谢

The problem is that cvGrabFrame(capture) results always false. Any suggestion to correctly open the video and grab the frames? Thanks in advance

推荐答案

您所观察的行为可能是由于 cvCaptureFromAVI()失败。您需要开始编码安全并检查调用你做出回报:

The behavior you are observing is probably due to cvCaptureFromAVI() failing. You need to start coding safely and check the return of the calls you make:

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

这个功能通常失败,原因有二:

This function usually fails for 2 reasons:

当它是无法访问文件(由于错误的文件系统权限); (不被OpenCV的支持或视频格式)在缺少$ C $系统上的CCS。 When it's unable to access the file (due to wrong filesystem permissions); Missing codecs on the system (or the video format is not supported by OpenCV).

如果你是新的OpenCV的,我建议你桌面(PC)第一个测试你的OpenCV code。

If you are new to OpenCV, I suggest you test your OpenCV code on a desktop (PC) first.