我需要捕获帧由从存储在我的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.