CvCaptureFromAVI问题 – OpenCV Android

我需要逐帧捕获存储在Android设备的SD卡中的video(在本例中为我的模拟器)。 我通过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(捕获)结果总是错误的。 有任何建议正确打开video并抓住帧吗? 提前致谢

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

查看“使用OpenCV显示AVIvideo”教程:

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

还要检查cvCaptureFromAVI中的路径是否正确。

希望这会有所帮助!

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

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

此function通常失败有两个原因:

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

如果您是OpenCV的新手,我建议您首先在桌面(PC)上测试您的OpenCV代码。